How I Learned to Code(viniciusvacanti.com) |
How I Learned to Code(viniciusvacanti.com) |
By the way, I decided to "learn to code" at age 30, and I find it interesting. Then again, I was also full of platitudes when I was in my 20s.
edit: the submission was retitled to something actually pertinent to the article's content, rather than the title of the article "Why You Will Never Learn to Code", which is shit IMO.
Then, after reading it, I feel that he is more interested in creating a brand, building an audience, than sharing his story and inspiring people. I think I will have to find out some other "learned to code and created a company" role model.
Most people used java.util.ArrayList all the time but they couldn't answer why nor did they want to know why a LinkedList, Map, Tree etc. would be better for a specific case. While it is nice to have all those high level types and classes available it's kind of sad that most people aren't interested in the inner workings.
Edit: The various Java collection implementations aren't really "low level" either, but you get the idea.
Sure, you got me to read it, but it felt too forced/contrived and salesman-like.
Anyway, I'm a beginner in programming/coding/scripting. I take courses online. After work. On the weekends.
I'm sure there is certainly a group of people for which what Vinicius says is true, so in terms of that, it's good to have someone write this out. However, it is more important to see/analyse if what he says applies to you.
What he says does not apply to me. I am 30 years old, have just started learning to program, and my birthday is a week away.
I am genuinely interested in it. My mind always worked in ways which help when programming. While I spent most of my life in the (liberal) arts, I think there is a strong correlation between my excelling in my previous endeavours with my capability to grasp programming concepts. I can't say my approach is the only way to do extremely well in it, because, as they say, there is more than one way to skin a cat. But I guess this middle-ground type of writing is not very good copy.
All that aside, congratulations to Vinicius for learning to code.
It is assumes that whoever is reading the article is similarly situated to that earlier version of the author both in terms of career circumstance and interests.
This is particularly clear in this excerpt:
I found that there are two types of people that power through the frustration [...] [t]hose that are really intellectually interested in learning to code. If you haven’t learned to code by now, it’s highly unlikely you’re one of them.
To answer anecdotal proof with anecdotal proof, I studied finance and taught myself to build web apps. I didn't do it because I had to. I didn't do it because I couldn't stop myself. I just forced myself to do it the same way I force myself to memorize Chinese characters, the same way I force myself out of bed every morning. Willpower isn't some mythical ability granted to the anointed few. It's just asking yourself, what am I doing right now? Is it what I want?
There's also a troubling perception of what 'coding' is behind this post and many others. I write code for a living and I'm under no illusions about my abilities. As James Somers pointed out in Aeon, I'm a kid playing around with tools given to me by adults. Nobody like myself or the author is going to build a Rails, a V8, an Ember, a Heroku. If I learned how to use a brush I wouldn't call myself an artist. It's fine that we're becoming more abstracted from the machine's reality - thank God DHH didn't have to use punchcards - but with that abstraction should come a bit of humility about what we've actually learned. Because for web development, at least, it's mostly syntax.
I'd better stop before I exceed than the original post length. If you'd like a tl;dr, it is: fuck the author's position, my experiences contradict it, and the author is confused about what 'real' code constitutes. (However, I wholeheartedly agree with his suggestion to learn by building something you yourself want.)
And people who does not understand how systems so central in our society work is in the core of several recent political problems and conflicts.
Moving on...
I'm a software engineer. That is, it's not just my job, it's a very strong part of my identity. I learned to code before I was 10, and in some respects I still haven't finished. However, I've had the honor of teaching a handful of people to build software, and it's taught me a thing or two about how people tend to pick it up.
If you're grabbing a "Learn [language] in [X time]" book, or similar, you're not going to succeed. These books market themselves in the same way as fad diets. Your expectations should be similar. That is, you'll probably make some early progress, but without loads of discipline [1] it won't live up to your ideals.
If you're like me, you know this already. You probably have a few of these books on your bookshelf, but they're collecting dust as you devoured them years ago before quickly moving on to better materials.
But most people aren't like me. Most people don't look at code as a thing which holds intrinsic value. Most people don't feel an emotional response to a clever quine or well-thought architecture. Instead, most people (rightfully) view code as a tool. It's something that helps them achieve their end.
If you're like most people, you need a goal first. But not just any goal, a goal that you really care about. A master carpenter can show you you all of the ins-and-outs of joinery, but that will (almost) never help you write a book, mow your lawn, do your dishes, or achieve any other goal that doesn't involve sticking two pieces of wood together. The same is true in software. If you have no intrinsic motivation about the process (coding), and you have no intrinsic motivation about the outcome (the thing you're building and its purpose), then you won't succeed.
Extrinsic motivation isn't good enough. Writing code is really, really boring when you don't care about anything to do with what you're doing. Saying "this will somehow make me money someday" isn't going to get you there.
So to borrow another metaphor, if you don't care to swing a hammer and you don't want to drive nails, why would you ever go searching for nail-shaped problems when you don't even have a hammer anyway? Further, why would you bet your livelihood on them?
1: If you had loads of discipline, would these books be nearly as appealing to you?
Unfortunately, the time commitment becomes prohibitive to those that have to keep running the job/consulting treadmill and can't fall back on an investment banker salary (or similar) to fund their creative ambitions for a year or more. That unfortunately is the real answer to the post's title.
1. Nights, weekends are bad 2. Forget codecademy 3. Have a real project you want to build
Check out the full article here: http://blog.zackshapiro.com/want-to-learn-to-code-start-here...
Starting as a 10 year old, I began learning to code and spent maybe 20-30 hours / week on it combined with school and friends. All of that time was during nights and weekends.
I think having a real project you want to build is a good start. I also think that a keen interest in the topic and a passion for learning will overcome most other obstacles.
It wasn't as technically difficult as most CS homework, but it was the first time I started thinking about programming as a tool to solve an actual problem I was experiencing.
With that said I did find myself wondering whether the author is a programmer, or slings code around. If you have the right kind of mind its not so hard to figure out how to tell the computer to do something, especially with a powerful SW stack; it's another thing entirely to deliver, say, 300K lines of code that is readable, robust, maintainable, extensible, and somewhat future proof, or to make the stack itself from the ground up. Of course, many of the "I've been programming since the age of 10" can't do that either.
And, with that said (:)), I probably share your suspicion of wanting to 'do a start up'; it's hard to throw a stick here (SV) without hitting somebody yacking about a start up. Problem is, 'start up' is so often the idea. It's rarer to hear "I want to build a device to help the blind, I reviewed my options, and VC money turned out to be the best choice for me because..." (VC money is often a terrible option, it depends on your business situation).
But I am straying off the subject, which is the blog said to learn to do something, dive in and actually try to accomplish something. I am wholeheartedly behind that. I'm trying to learn a topic for work, and am reviewing some Coursera courses. And, not getting far - I need to immediately try to apply the ideas to a real problem to get traction, I think. I think I will succeed just fine, despite not having tried to do this particular thing (Machine Learning/AI) since the age of 10.
I half expected the article to consider the sheer scale of the programming stack: today, the conceptual layers from NAND gates & machine code to graphical resource editors are so numerous and complex that I can scarcely comprehend how any student of programming starting out these days any later than grade school can absorb the material in any sensible timeframe.
That's pretty easy to say for someone who's dad seems to have had the same interest. I was brought up by a mom that can't tell a bass guitar from a guitar and a dad who doesn't really have an interest in music other than a music 'collection' of 8 CD's from the sixties and who probably does not have a sense of rhythm. Thankfully I had some peers who played music and parents that bought me my first instrument, but actually practicing and getting good at an instrument is (to me) a very tedious and deliberate form of practice that can take a very long amount of time if you happen to be mainly interested in a type of music that happens to be challenging to play - like what I was interested in. Practicing programming for four hours is more fun and less draining than properly practicing an instrument for one hour, for me. To keep it short; low self-esteem, and especially a lack of social self-esteem, and lack of discipline when it comes to practice; if my so-called "passion" for music wasn't able to help me battle through those things, I guess it wasn't much of an interest or passion to begin with, eh...
He wanted to start a company. That implied, in his case, learning to code.
Just like finishing my degree implied long days working to pay it (wasn't very passionate about cleaning barracks I can tell you ;-)
(Btw, I'm one of those who started coding at age 12 by picking up the c64 manual.)
I started coding at an early age too, I didn't understand just how hard it was until I started rubbing elbows with a lot of business types and trying to show them technical stuff. The knowledge gap is so wide and gaping that yes, you need a long time immersed in technology before you can understand it enough to build with it. If you're really bright, motivated and lucky, you might manage something in 6mo to a year. And those months will be the hardest of your life.
But I think there's another factor that's at least as important: time. A ten year old has a much bigger time budget for learning programming than a thirty year old.
And it takes a vast amount of time to truly master it.
I guess I'll never be a good, passionate programmer, but it's the only thing that I seem to like that also brings with it a paycheck.
EDIT: I have spoken one language since I was three, two languages since I guess I was 14, but it wasn't until I started learning a third language that I realized that human languages in themselves are pretty interesting, with all their different grammatical constructions and peculiar ways of expressing semantics.