The Site That Teaches You To Code Well Enough To Get a Job
HughPickens.com writes Wanna be a programmer? Klint Finley reports that software developer Katrina Owen has created a site called Exercism.io where students can learn to craft code that's both clear and efficient and get a lot of feedback on what they're doing right and what they're doing wrong. Exercism is updated every day with programming exercises in a variety of different languages. First, you download these exercises using a special software client, and once you've completed one, you upload it back to the site, where other coders from around the world will give you feedback. Then you can take what you've learned and try the exercise again. The idea was to have students not only complete the exercises, but get feedback. Exercism.io now has over 6,000 users who have submitted code or comments, and hundreds of volunteers submit new exercises or translate existing ones into new programming languages. But even Owen admits that the site is a bit lacking in the usability department. "It's hard to tell what it is just by looking at it," she says. "It's remarkable to me that people have figured out how to use it."
I found the feedback you get from simply reading other people's solution to the Project Euler exercises was invaluable
If ever a language needed some help getting people to write *good* code instead of just being able to write code, PHP is it..
>> the site is a bit lacking in the usability department
Yep, that'll get 'em ready for a job in coding. You really don't need any of that new-fangled usability crap to win customers or support people anyway - if it was hard to write, it oughta be hard to use.
Who is giving away their time to code review the work of thousands of neophyte programmers?
Sounds to me more like the blind leading the blind.
Another one? Isn't this like the 158th "Site that will teach you to code good enough to get a job?"
I couldn't get a programming job after I graduated with an A.S. degree in computer programming in 2007. It didn't help that I was a help desk technician while going to school. Most recruiters won't consider you for anything else than the last position you held. Once a help desk technician, always a help desk technician.
Here's where the rubber meets the road. Beyond the code not working at all, or having redundant/unnecessary code, exactly what should they expect as feedback? Yes, there are a few algorithm patterns and idiomatic usages that are standard for every language, but there's always More Than One Way To Do It, and how consistent and high-quality is the feedback going to be? It seems to me this could easily fall into a trap of the barely-sighted leading the blind when you have non-experts assuming the mantle of an authority. There's plenty of bad and/or inconsistent advice out there about programming style. To take a simple example... what feedback would you get about usage of the ternary operator? Many would consider that bad style, period.
TFA is interesting, but more than that, this whole exercise will help us understand the problems of our industry:
from TFA:
Then later:
now...those two statements do not compute...
how could something be so helpful for new programmers, yet the creators themselves marvel at how newbies are able to navigate around their totally abstract UI?
here's the problem: misconceptions about ***how people learn to actually code***...not learning "about" code...like how it works...no...I'm talking knowing how to make a functional program in real-world situation (not for hobby) to solve a need of users
TFA repeats common misconceptions...here are a few, from TFA:
Maybe in a sense these statements are true in that they accurately reflect the *what people would say* if you asked many in the industry...and indeed these conditions may reflect many people's experience of learning to code, however,
*IT DOESN'T HAVE TO BE THIS WAY*
learning to code doesn't have to be any more or less difficult than learning **any** complex task
Here's the real problem: CODING IS TOO LUCRATIVE AND NEW
Real coding, coding that makes programs that people pay to use, is maybe one of the world's most specialized, complex and, importantly, *new* skills.
That's why *coding education* is so awful and amateurish...***WE CAN'T KEEP REAL CODERS IN EDUCATION LONG ENOUGH***
That's it...that's your answer to "why?"....Real coding education must be formulated by people who are *both* professional educators *and* possess the coding skills necessary...for any new enterprise this is how you write a training curriculum
Thank you Dave Raggett
using a special software client
Doesn't anyone else find this suspicious? Why in the world do I need to install a special client just to download an assignment? Why would anyone who knows anything about computers agree to this? How long before we start reading the stories about what this special client was doing behind users backs, that supposedly no one suspected?
I'm an American. I love this country and the freedoms that we used to have.
using a special software client
Doesn't anyone else find this suspicious? Why in the world do I need to install a special client just to download an assignment? Why would anyone who knows anything about computers agree to this? How long before we start reading the stories about what this special client was doing behind users backs, that supposedly no one suspected?
no one suspected?the code is available to downoad.
Recruiters are idiots. You're going to have to do some coding for free to prove your mettle. Open source projects are always looking for coders if you can't think of anything that you'd like to write. Something like http://code.google.com/p/kerne...
Comments about indignantly ddoss-ing a site because of your personal preferences proves nothing but that you should be a windows user.
when i first learned to code on my own one of the hardest things was 'where do i start' and then 'what the hell do i do next'. What do i try to code? Series of exercises that lead people along is very useful and will save alot of time. If they can at a minimum make things less greek to get you past the base entry level it makes it alot easier to google and figure out what to do next.
when i need to learn something new, the initial phase is a pain because 'where do i start' and 'what is important'? even with 15 years experience grabbing a book and going involves alot of skimming through unimportant bloat. Reading is a piece of learning to code, but hands on exercises are the most important way to do things.
3 things that I find very important when learning new technical skills and when i first learn.
1. repetition is critical. Do it once, ok sort of get it, but confused. do it again 2 weeks later when I forgot what the hell i was doing and get pissed cause I have to solve things again makes it stick in my head more. Then do it a 3rd and if i can go through quicker, I know i made progress. In the meantime i move on to other stuff. Find it important to let some time go by before repeating so i have time to forget stuff and then when i do again it stays in my head better and i understand it better. Plus i learned more stuff so the material is less dense.
2. never feel comfortable: if something is easy im not learning. the next project should always make me feel uncomfortable. I have to learn new things. new syntax. what i did before didnt work. dont understand it. If I am cruising, its too easy. Good for working cause you gotta produce, but for learning you want that 'this is uncomfortable and annoying feeling' this tells me Im challenging myself. If Im challenging myself I learn more in less time even though its really annoying.
3. non-creative projects: this one is counter-intuitive. Before lebron james was in the NBA he spent countless hours working on fundamentals such as footwork and dribbling. This is boring, but its critical. If you start by looking for some cool creative thing, you waaste time on the creativity. Before you get to this phase its best to get the mechanics down. So if you do generic things that force you to learn mechanics first its more efficient. Its not as cool to do this, but I find it alot more efficient in my learning speed. My goal is to get to the point where I am 'cruising or closer to cruising, but less anoying i dont get this crap issues', and then I can move into cool things that are more interesting to do', My motivation is to do that cool stuff, but to get there faster, I do not the generic stuff first.
Sure, it looks like it, and there are plenty of people with jobs out there that can lash something together. I worked with somebody at a startup would was struggling to get a web page working. After a few minutes, I realized the problem. She had no idea that you could loop through an array backwards.
We don't need more "coders". We need more software engineers and computer scientists.
Actually, maybe not. Maybe we need a workforce that is organized and that would stand against employers who insist on completely devaluing our field in a search for easy money, tossing aside qualified people in search for exploitable labor. That's the problem. I think we should be defending our industry and those that have the proper skills to do it well. Just because the latest, most visible trend is to hack together a mobile application or web site for a quick buck doesn't change the need for fundamentals.
Things like data structures, algorithms, discrete mathematics, computer architecture, etc. do matter. Not having a basic understanding of computers and computation leads to an astonishing amount of bugs, security holes and wasted effort. Some people have just accepted this as the cost of business. I say it's past time that we really stood up and say, no, things should be better. But since we can't collectively bargain, we are stuck.
I know, who cares, the money is awesome. It'll be like that forever, right? What does it matter that nobody can count on having a career after ten years because they are seen as too old with an outdated skill set.
This isn't about school, although I think a proper CS education is still the best way to learn this stuff. But you can get it with diligent self study and experience as well. In the end, real programmers have the conceptual understanding to adapt and excel in the long term. That's what we need more of. Real careers, not just jobs.
who said "in a weekend"???
I didn't...YOU did...you made that comparison, not me
Nowhere did I insinuate that learning to really code can be done in a week...it just doesn't have to be a soul-crushing Sysiphian Crucible of constant trial and error....
I said it doesn't have to be frustrating and stupid...not that anyone can do it in a weekend
Learning a complex task like brain surgery is obviously more than a weekend, but it's orders of magnitude more time depending on where you start...if you're already an accomplished Ear, Nose and Throat surgeon then you can learn to operate on the brain faster than if you just have a high school diploma
Thank you Dave Raggett
Looking at their example conversation, I had no choice but to face palm. Having never looked at Ruby code before, I was able to deduce perfectly well what the first iteration was doing. Do we really need to expand a function that can accomplish its task in one line into a function that may be a little more readable?
I wonder how today's programmers would make do with resources that were available in the early days of computing, or even when the IBM PC came out. Having to deal with small amounts of RAM caused programmers to be extremely creative in their programming. Granted that we do not have to go to such extremes today to write programs, reading about such practices is still very inspiring.
Is that a roll of dimes in your pocket or are you happy to see me?
OK, I admit I'm not much of a coder. But there are times when someone says, "oh, all that is needed is a script to do this and that, etc." Looks simple enough, maybe I will see about writing some basic (no, not BASIC) code. Not that it is perfect but enough to git er dun. I find lots of websites on how easy it is to do various code languages with "hello world" examples. But the $500,000 question(s) I have is where do I write the code? Purchase an editor or use a simple editor (i.e. Notepad). Then when that is done, what next? There is a compiler but I find nothing about these (I heard there are so many variations, not possible to list). OK, maybe the info is out there and maybe it is simple to find, but I find is a lot shlock of copy/paste of same bankrupt discussions that originated in Usenet.
mfwright@batnet.com
I can't see a button to reply to the article as AC so I'll just reply here.
"Yep, ready for a job in coding"
- It would be more convincing (for a job, atleast if I was hiring) if the exercises were along the lines where you'd really need one of deques, ring buffers, sliding windows, tries, classification/sorting/statistics on streaming data. Because atleast personally I find those really important/widely useful yet rather tricky to get right. So for my own projects I'm shamelessly borrowing known working code. But if I was hiring I'd be more impressed if the candidate atleast had some experience using these.
I'm currently converting an old WordPress blog into a static website, using Python to extract content from the MySQL database into array structures and files, using PIP as the MVC framework on a PHP LAMP stack, and following standard OOP practices, documentation and unit testing.
Stopped reading at "special software client" and never plan to visit the site. Even if there's nothing underhanded going on, requiring a software client for a web site in this day and age is beyond lame and demonstrates such a profound lack of clue that it makes one assume there's nothing of value on the site (finding out whether there is or not, is an exercise left to those with more curiousity and time to waste than I).
What about the blind guy I studied with? I'm fairly sure he couldn't just "pick up a book." He had a computer with text-to-speech when such a thing was incredibly rare.
Almost amusingly, I have a far worse (and more insidious) disability than him, but the support organisations gave me written notes while they gave him text-to-speech (much more approach for me as well, as opposed to written notes).
This means I'll never get a full time job. I mean any job. Nobody hires those with disabilities, these days.
I'm an experienced programmer (for almost 30 years). I first read about the site about four months ago. I like Ruby a lot, but haven't used it as much as I'd like, so I thought that exercism.io would be a fun place to get some feedback. I submitted my first program that very first day. Today, four months later, my submission has two views and zero comments. Wow, that's going to help a lot. I guess there has to be some minimal mass of developers to actually look at the code and make comments. But for now, the site is far, FAR, from being anything close to helpful to teach you to code.
Really, learning to code real things well takes a gift and at the very least several years of experience.
Go ahead and say whatever you need to believe to maintain your ego. You're only deluding yourself.
Here in reality, it's nothing special.
Required reading for internet skeptics
Or you could just use "wget -m" or something similar.
Forget magic. Any technology distinguishable from divine power is insufficiently advanced.
You sound like the guy who wrote FizzBuzz Enterprise Edition
Required reading for internet skeptics
Funny, in my reality even experienced coders are fairly unaware of what counts as good, maintainable code. Obviously maintenance isn't a concern in some software so this may not apply to you.
Or you could just use "wget -m" or something similar.
To do what exactly? BTW, '-m' doesn't appear to be valid wget command switch.
How DARE they claim copyright on a photo of ME that was paid for by ME!!! How DARE they put a watermark/logo thing on MY photo!!! How DARE they not provide raw format files, or negatives for the older technology!!!
I lump photographers in with con artists and patent trolls. They are worse than the RIAA and MPAA.
As for the "quality" of their work, oh please. My mom blinked for a wedding photo, so they painted on some eyes. You get stupid very forced poses, misrepresentation via Photoshop, and a huge distraction from whatever event might be getting photographed.
I thought that all you need is BOFH.
nosig today
Maybe this will change in the future, but for now, low-quality software is generally not "good enough". If your website is vulnerable to SQL-injection, you're going to find out, and the results will be catastrophic. If your UI looks like it was designed by a chimpanzee on LSD, it is not going to pass muster. And if your developer doesn't understand complexity theory very well, the software will quickly become unusable from a performance standpoint.
Photography is fundamentally different, due to digital photography, but not in the way that you mentioned. Let's rate photos on a scale from 1-10, and let's assume that the photos taken by an experienced professional like your wife are going to average a 9. Let's further assume that the photos taken by our chimpanzee on LSD are going to average about a 4. In the days of film, each time you pressed the shutter button, it cost you money. For a pro who bought and processed film in bulk, it might have been $0.20/frame. For an amateur, it might have been $0.50/frame. Given the costs involved, it was important to be taking 9s and not be taking 4s! But with digital, our chimpanzee can easily take 1000 photos of a wedding, at a marginal cost of zero per frame!
Now of those 1000 photos, most of them will be trash, but you really only need 30 or so frames to make an album. What do you want to bet that 30 of those 1000 will be 7s or above? I'd say it's highly likely, and that's why your wife isn't getting as many calls as she otherwise would have. Digital has changed the game. An amateur really can achieve acceptable results by brute force!
The software equivalent is to keep writing more and more code until the system works. I'm sure you've seen systems that fell victim to that paradigm. Sure, release 1.0 may work acceptably well, but release 2.0 will never happen, because nobody can so much as breathe wrong on the codebase without breaking something.
They don't grade fathers, but if your daughter's a stripper, you fucked up. --Chris Rock
To mirror the website into a set of static HTML pages. This requires the blog to be up, of course.
Manual claims it is.
Forget magic. Any technology distinguishable from divine power is insufficiently advanced.
I'm doing the clean slate approach by using only the exported database from the WordPress blog and programming the static website from scratch. In some ways I'm completing the circle. This particular blog started off as a programming project while in school in 2002, converted into a Joomla website in 2008, converted into a WordPress blog in 2011, and now into a static website. I need to remove a lot of crud that accumulated over the years.
"Book" is figuratively, of course. We had several blind CS students each year. They got materials translated as as needed, braille, audio, etc. and all exams aural only. Success-rate for them was about the same as for other students, i.e. about 50% graduated. As far as I know, they did not have significantly more problems finding jobs. Really, the a disabled programmer with the talent and dedication needed still has most of the productivity of a comparable non-disabled one. A person without the talent or dedication wil never reach either. I am not at all against disabled people learning to code and earn a living with it, as long as they have what it takes mentally.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
I guess you have never see good code then, because that is a rare thing. It is however the thing you need in order to profit from IT. I have seen countless projects that failed because the coders were incredibly bad.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
You define technical debt as (Doing it right) Less Than (Doing it wrong + Clean up to make it right)
I routinely see (Starting over from scratch and doing it right) Less Than (Clean up alone)
Here in reality, it's nothing special.
Depends on your definition of "special". I use it to denote rarity or uniqueness, which good code is. If you think "good code" is not rare, you have an incredibly low standard of quality.
That is contrary to my thirty years experience from the field. Most people design and code SHIT. The strange thing is that they often get big projects and huge funds to release this crap unto the rest of us. (I am looking at you, Gnome... and systemd... and consolekit... and KDE... (and Windows 8? hello?) so many bad decisions so little time. Thank god for Awesome)
The screenshot in that first link (http://www.wired.com/2014/09/exercism/) appears to be a screenful of SML... Respect to whoever sourced that picture!
I agree that this is very likely true. Personally, starting over from scratch with the experience gained is my preferred solution. What I see in practice is however that almost nobody does this except after extensive failed efforts to fix it. I do have also seen projects that failed to do it over from scratch, because the same mistakes were repeated, so that approach is not actually ensured to work, as it is not clear how to "do it right" to the people that make the decisions, otherwise they could have done it right the first time. And quite often, these people do not learn from mistakes.
Side note: I did not "define" anything, I did comment on what I see happening. Also, the relationship is not as easy as you state. There are direct costs and indirect costs and financial damage and non-financial damage, like reputational damage or losing competent people because they are fed up.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.