7 ms·
Learning to Code: The Roadmap I Wish I Had Been Given
- unicron 15y agoThat is learning to build web applications. It is different to learning to code.
- moadeel 15y agoWhat are some of the main differences?
- xymostech 15y agoWeb applications are more of a specialized field. Coding/programming encompasses many programming languages, frameworks, platforms, etc. Web applications use a subset of these, by using mostly markup languages (html/css) and some web languages (javascript/php). They are deployed to servers with http software, and are built for handling web traffic.
- jgw 15y agoWell, consider all of the things that have to be in place for the web app to get from where it is served, to where you're reading it. The web app itself is typically going to be running on a framework, written in another language - for example, a site might use Rails, which is written in Ruby. This has to be served by a webserver - Apache is a popular choice - I think much of that is written in Java. The webserver runs on a machine, which might be running, say, Linux, as its operating system. The Linux kernel is written in C. Now the page has to be transmitted across the network - hopping across the globe from one router to the next. The hardware that does all this switching is in microchips, which are often designed in a language called Verilog. (This is my own little niche area) The browser that you're using to view the page might be running on a laptop running Windows, which is largely written in C++. There are countless other fields of "coding", too. So to summarize, writing web apps is a subset of a vast and complex field of study - and to follow this roadmap (which is probably a good way to learn what the author wanted to learn) will not teach you anything about most of the other things one might want to code. For what it's worth, in setting out on your journey to learn about programming (in the broader sense), I think you could do worse than to start with C and Scheme.
- moadeel 15y agowow .. thanks. That's quite a summary on the mechanics of how it works. Do you mean to say, it would be a bad idea to start with C coding?
- jgw 15y agoNo, I'm saying that knowing C and Scheme is a great foundation for future computer scientists and engineers! They lay a solid foundation upon which much can be built. But probably not a good place to start if, like the original author, you're mainly interested in developing web apps.
- zackzackzack 15y ago"Learning to Develop Websites" would be a more apt title. Beating a dead horse, coding is more than just learning JavaScript and Rails.
- davidbalbert 15y agoAgreed, but you have to start somewhere. I think one of the things that turns lots of people off from CS education, and programming in general, is how long it takes to get from just starting out to making something cool.
- zackzackzack 15y agoOf course, of course. All I know how to do is web development (besides some Mathematica for research and dicking-around). This isn't like I am standing on top of an intellectual mountain, shouting down at the ignorant masses gathered below, "Stop worshiping your false golden Rails idols". If I could add a stage though, it would probably be something like "Cluster 5: Why does my website suck?" Sure it's there, it's up on the WWW, but a website made from someone at Cluster 4 isn't something that is going to make you money. Cluster 5 is when all the CS comes in. You have to learn about algorithms and data structures and regular expressions and what is actually going on behind the scenes. Yes, you can make a website that does the basic simple "of course, here's an exhaustive search" solution to the given problem. But can you make it fast? Or beautiful? Or, heaven forbid, intuitive? Can you fix it after you try and fail to make it the above three? That's the stage that never ends, the one that doesn't take a week of hunkering down with a textbook to get through. Cluster 5 is the stage that CS education tries to start everybody at without any prior experience. It works for the imaginative people who can make the leaps about why this matters, but for most it just leaves everyone behind. With web programming, you actually have motivation to learn these weird things about patterns of electrons. Because, honestly, who wants to make websites that suck?
- jyli7 15y agoI agree with this entirely, and I fully understand that web development represents a tiny slice of coding generally and that what I've presented is a tiny fraction of what you need to learn to be a good web developer. I plan to edit the post a little to reflect what people have said. Hope the title wasn't too misleading.
- moadeel 15y agoI have always wondered how much of CS coding knowledge applies to web apps and how necessary it is to take some of the killer math courses offered in university to be able to code web apps proficiently. And if there is that big of a difference between coding and web apps, then shouldn't universities and students be better off learning how to code web apps since they seem to be in dominant usage anyway? Btw, I am not a technical person, hence the curiosity. Insights would be much appreciated.
- Robin_Message 15y agoTo give an example: I'm working on something that is on one level a simple web app. But then, I needed to code what amounted to a concurrent merge sort (merging multiple streams of information (and their histories) that are each ordered but not relative to each other — think Twitter streams, since that's what they were.) Because I have a degree in computer science, that theory background meant I could quickly recognise the type of problem I was trying to solve and apply standard stuff I had learned to it. Without that theoretical background, I would have developed something that worked, but it would have taken me longer, it wouldn't work so well, and would probably break in unpredictable ways :) In short, its never just web development.
- tikhonj 15y agoI think saying that web apps are in "dominant usage" right now is a bit unsubstantiated--there are plenty of jobs that do not involve web apps. Also, you have to remember that universities are not about preparing you for a career. You do not need 4 years of general education if your only goal is to produce web apps quickly. Finally, non-trivial web apps--those doing something complicated or needing to scale significantly--do need CS knowledge, and even simple ones doubtlessly benefit from it.
- henrikschroder 15y ago> how much of CS coding knowledge applies to web apps That depends on your web application and what programming problems you need to solve. If you only need to glue together other people's code and components, then not so much. If you need to write your own framework, crunch ratings data for recommendations, custom binary serialize data for your ux layer, or do complexity analysis of some backend algorithms, then a CS major will help you a lot. > shouldn't universities and students be better off learning how to code web apps since they seem to be in dominant usage Oh no they're not. The absolute majority of software being produced is for internal corporate use, helping businesses on the inside. Also, universities do teach web apps, it's just that they're not very complex or interesting problems. HTTP requests go in. HTTP responses go out. You have a framework in between that abstracts this, and there you have it.
- karlgusner 15y agogreat article! I wish I had read this when I first started coding. I am sending this to all my friends that are now asking how they can learn to build web apps.
- rainboiboi 15y agoI wouldn't exactly say web development and CS have no linkage though...
- anujkk 15y agoI agree that the title should be "Learning to develop web applications". "Web Application Development" is only a subset of "Application Development" which is again only a subset of "Coding/Programming". There are many kinds of application development - web application development, desktop application development, mobile application development, embedded application development, games development etc. So, web application is just the most popular kind of application development. Also not all coding is done to develop applications. There is difference between a program and an application. Sometimes people code to write utility programs, e.g. shell scripts which isn't application. I believe undergraduate courses should be designed to provide solid fundamental knowledge of computer science and how various fields of computer science relate to each other while postgraduate programs should provide specialized education.
- thekevan 15y agoGoogle cache copy: http://webcache.googleusercontent.com/search?q=cache:kdVysoZ_6XAJ:jimmy-li.net/blog/%3Fp%3D62+http://jimmy-li.net/blog/%3Fp%3D62&cd=1&hl=en&ct=clnk&gl=us http://webcache.googleusercontent.com/search?q=cache:kdVysoZ...
- danso 15y agoI studied programming in college...and while I liked the assembly-code + controller projects, I wish there was more focus on web development...because the one thing that has gotten me excited about programming is the potential to share (i.e. brag) about my work. Making clever paint/tic-tac-toe/sudoku programs in Java/C++ are good exercises...but I lost interest in programming when I couldn't see it being used for more day-to-day practical tasks. One specific topic I wish had been taught was regular expressions. In my first year of comsci classes, regexes were in the optional chapters of the book. Knowing about them would've led me to do more data-processing/information-gathering type programming, which is the track I am on now. Plus, they're just damn plain useful in every coding context, even for project code-search-and-replace.
- brimpa 15y agoIt was my understanding that most CS programs include a course covering formal languages and grammars. At my school it was called (creatively) Theoretical Computer Science. Learning to break apart a regex and rebuild it as a state machine is where the real magic happens.
- jholman 15y agoAny decent CS program should contain such a course, sure, but it is probably not in the required curriculum, and it's probably not taken by very many students. As for names, at SFU (my alma mater) it's called "Formal Languages and Automata". Well, actually, there are actually about half a dozen courses covering parts of this material, but that's the most-perfect match for what you described.
- bad_user 15y agoLearning to break apart a regex and rebuild it as a state machine is where the real magic happens. That's useful for sure, but modern regex libraries have facilities that can only be translated into a pushdown automaton and you end up using those facilities a lot, even if you don't realize it.
- ThueLMadsen 15y agoSounds very interesting but I think the site is down. All I get is: Forbidden You don't have permission to access /blog/ on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
- chug2k 15y ago+1
- dustingetz 15y agohttp://webcache.googleusercontent.com/search?q=cache:kdVysoZ_6XAJ:jimmy-li.net/blog/%3Fp%3D62+&cd=1&hl=en&ct=clnk&gl=us http://webcache.googleusercontent.com/search?q=cache:kdVysoZ...
- jyli7 15y agoSite's back up. http://jimmy-li.net/blog/?p=62 http://jimmy-li.net/blog/?p=62
- BadassFractal 15y agoDown for me still.
- msmorgan 15y agoThere are better places than w3schools to learn HTML and CSS. See http://w3fools.com/ http://w3fools.com/.
- mixmax 15y agoW3fools is nothing but a jab at w3schools, and most certainly not a place for a beginner to start learning css and html.
- bgilroy26 15y agoWhere would you recommend?
- oscilloscope 15y agoFor most web technologies, this is a decent source: https://developer.mozilla.org/ https://developer.mozilla.org/ For JavaScript: http://eloquentjavascript.net/ http://eloquentjavascript.net/ For HTML/CSS specifically, use Chrome or Firefox's Inspect Element to take a look at web pages. It's especially instructive to examine things like 1kb grid, where the CSS itself is designed: http://1kbgrid.com/ http://1kbgrid.com/
- bgilroy26 15y agoThank you so much!
- RobertLysik 15y agoAs someone in the process of learning Rails myself I absolutely agree with your blog post. Especially your admonition to begin working on a project of your own much earlier than when you feel ready. That is the surest way to reinforce what you may be learning through a tutorial.
- kpennell 15y agoThank you.
- deleted 15y ago[deleted]
- zecho 15y agoWhile I really like Heroku for the simplicity of use, you're not going to learn a bunch about how a web server actually works by using it.
- techiferous 15y agoAgreed. It's a good first step, though. To learn about how a web server actually works, I'd suggest setting up your own VPS on Linode. They've got a great library of information to help someone get started: http://library.linode.com http://library.linode.com If you're coming from a Windows background and don't have any Linux/Unix command line experience, though, this will be daunting.
- gunnaraasen 15y agoAgreed, but learning web server admin is a pain. I spent all of yesterday trying to upgrade ruby/rails on my linode for the first time. Kept running into errors and eventually decided to just start over with a clean Ubuntu install. That kind of demoralizing experience isn't a problem when starting with Heroku.
- bad_user 15y agoRubyGems and Linux (especially Debian / Ubuntu) are like oil and water. Don't install Ruby libraries through apt-get, and also don't install them through RubyGems globally (i.e. never use "sudo" for installing gems). Instead install gems for the local user only, with the help of RVM. Then to upgrade, if everything breaks, you can just delete your RVM directory and start from scratch again. Of course, this brings with it a whole other can of worms, because then it's your responsibility for upgrading your libraries with the latest security-related fixes (which otherwise would have been updated with a simple "aptitude safe-upgrade", which can be a cronjob or something). But then you've got the same responsibility on Heroku. See http://beginrescueend.com/ http://beginrescueend.com/
- malingo 15y agoFinally, a "learning to code" article that actually mentions version control and its importance. Of course it's an extra thing to learn when all a beginner wants to do is get something cool (often a website or game) working quickly. But what happens when that beginner wants to experiment? "Fail fast" is meaningless if those fast failures irreparably break that simple, cool website or game that used to work. Fail fast means the ability to reset (or even revert) or stash or branch and keep moving.
- michaelfairley 15y agoWhen someone says "I learned how to ride a bike over the weekend", the response is never "I don't see you doing tricks in a half-pipe, so you really only 'learned how to pedal down the street'. Don't call that learning how to ride a bike." If "knowing how to code" means that you've built webapps, databases, embedded systems, mobile apps, operating systems, console games, and a compiler and mastered 19 programming languages, then very, very few people in world are coders. Hacker News, stop being pedantic downers, and instead applaud someone for picking up a new skill in life (and trying to help others learn as well).
- jgw 15y agoI think that depending on one's perspective, one might consider this more analogous to claiming to ride a bike, but as it transpires, you only learned how to ride a bike with training wheels. You can write the analogy however you like to make it suit the point you're trying to make. I don't think it's unreasonable for folks to suggest that "Build web apps" is maybe a more apt title than "code" for what's described here. It would not harm this well-intentioned and well-executed article to do so.
- billpatrianakos 15y agoAgreed. A lot of pedantry and smartest-person-in-the-room-ism going on here. People around here seem so jaded. Out in the real world (ie not Silicon Valley) a professional programmer graduates from a CS or CIS program, gets a job doing mindless coding somewhere like in a local government building and writes ASP, .NET, or some form of C all day. They get decent at like 3 languages, stagnate, and become dinosaurs. That's why so many systems suck when those guys retire and the new guys come in. I think that sucks and it should be avoided but my point is, what does make you a real coder/programmer/whatever you want to call it? Is it getting paid or is it knowing the ins and outs of the latest cool-new-thing? Because that's what it seems like everyone is getting at. I have a deep respect for everyone here who I know knows far more than I could hope to know but at this moment I'm a little disgusted by how out of touch everyone seems. I'd submit that there is a definition of a "real" coder but unfortunately it cannot be quantified. You know it when you see it. There's a combination of subjective skill, clout, and aloofness that quantifies the kind of real programmer touted around here but in the real world they're a lot like the cheap guys in India that a lot of people like to deride. I didn't know programmers could be such snooty hipsters.
- kmfrk 15y agoI used the exact same approach, except I went with Django and DotCloud. I think Rails people have it even easier with better guides - and possibly documentation.
- why-el 15y agoI am following exactly what this guy says, but it took me a long time, over three years, to finally settle on whats important for this kind of career. I revisited C so that I can keep up with git code and learn from it; I bought a Rails book,and I am trying, although very slowly, to do anything that comes to my mind in Ruby. This is not about Rails, its about a healthy shortcut. I was not lucky enough to read something like this sooner. This is excellent advice, and I commend him for saying it.
- Tycho 15y agoThe thing is... you probably also need rather high aptitude to make that much progress in 6 months. These blog posts never mention that cause the authors are too modest.
- BCounsell 15y agoTo bad the Roadmap didn't include being able to access your blog/article. I'm forbidden....
- jyli7 15y agoApologies for the site's been down. It's back up now: http://jimmy-li.net/blog/programming/how-to-get-started-in-web-development/ http://jimmy-li.net/blog/programming/how-to-get-started-in-w....
- argumentum 15y agoI actually do think the web is a good place to start, especially with a backend in python or ruby. You get to quickly see the results of what your doing, which will spur you to learn more. I definitely do not think that books, tutorials or classes are the way to learn programming at first. The thrill of discovering the concept of recursion on my own really hooked me onto coding. I remember googling "a function calling itself" semi-hoping that no one else knew about this yet... I did Neuroscience and BME undergrad, so I only had taken the 1 required class of Java (which I couldn't stand at the time, it was just too messy). I'm glad I didn't take more CS in college, it might have turned me off for good. Yes, once you get to where your fluent, I think classes (or books if your self-motivated) in algorithms, data structures and other hard CS are essential. But to get to that point, think of a creative project and try to build it, you'll really fall in love with the language you use, and you'll understand the real reason why people program: because it makes you feel like god.
- ralphos 15y agoGreat post and a lot of useful information. Particularly relevant for me as I'm a noob starting out on my first project, much like described in the post. I've followed a very similar roadmap in learning bits of html/css (highly recommend the Head First book), javascript, version control, ruby and doing Hartl's, 'Rails Tutorial'. I didn't get a job at Pivotal Labs in SF like the author (which I'm guessing would be a pretty awesome learning environment) but I've managed to convince the 'Pivotal Labs' of the Philippines to take me in & provide mentorship ;) If anyone is interested I've just started keeping a log of each step along the way at http://www.ralphy.tumblr.com http://www.ralphy.tumblr.com. (Will update with more posts soon). So far, it's been tough and I'm realizing how little I know in the whole spectrum of Rails, let alone web development. Having said that I'm already building stuff on the web I can actually see and show my friends, which is kinda awesome.
- toadi 15y agoLearn Javascript follow some tutorials on jquery ;) Think it's funny most people see javascript is the same as jquery. Learn to code is the same a learning a framework?
- luriel 15y ago> Think it's funny most people see javascript is the same as jquery. I don't think it is funny, it is rather sad. > Learn to code is the same a learning a framework? In this days of byzantine frameworks apparently yes.
- oscilloscope 15y agoJavaScript's a byzantine language on its own. jQuery's a great choice for beginners learning to program for the first time. Two related frameworks, underscore and d3, both have jQuery-inspired APIs and use higher-order functions extensively. These frameworks teach lessons in functional programming that transfer easily to Python, Lisp, Haskell, and even mathematics.