Hacker News new | ask | show | jobs
by steve8918 5045 days ago
I took this entire year off to learn new things, like web programming, etc. I have around 20 years of programming experience, with a background in C/C++, so I had a very significant advantage over the writer of the article in terms of getting started in that direction.

But I did come across similar things that the writer talked about. I first went about it by choosing Python/WebPy as my backend, and then switching to Wordpress as a front end for my website because I got tired of having to do every single little thing, and subsequently learning PHP. Then I started focusing on Javascript, jQuery and AJAX. My website is hosted on EC2, so I needed to understand how that all worked (not nearly as difficult). Then I tried learning how to make a Facebook app, so that ended up taking a few weeks, since the documentation is amongst the worst I've ever encountered in my career. I needed to figure out how nginx worked in order to get certain things working, and I also needed to learn the basics of Photoshop and Illustrator and basic graphics techniques. Luckily I have several friends in design that helped me get over this hump.

These last 8 months haven't felt like an exercise in learning how to program more so than 8 months of constant problem solving. Sure, I learned a bunch of new technologies, but my main goal was to get up some web-based projects, and every step of the way I encountered problem after problem, and my job was to solve these problems by any means necessary. Solving these problems entailed me having to learn Javascript, jQuery, Photoshop, Illustrator, etc. I didn't relish the idea of having to keep learning new stuff, but I did it because I knew it was the fastest way to solving my problems. I can't say I'm an expert in any of the technologies above (I constantly get Javascript and Python syntax mixed up in my head, and I google 80% of what I need), but I can solve just about any problem that I've come across.

I think this is the key to bootstrap yourself and doing anything related to technology, be it programming, sysdmining, etc. It's not so much the love of constant learning, but rather not giving up in the face of constant roadblocks, and constantly attack problems over and over and over and over again until you solve them. Don't get me wrong, I've very much enjoyed learning these technologies, especially Javascript which is a wonderful language (despite its flaws), and so much more powerful that I ever thought. But I know I've only started the scratch the surface.

As well, another big factor is keeping a high level of emotional energy in order to keep pursuing your goals. One of the things I was working on was using Tesseract to do OCR on uploaded image files. After 3 weeks of trying to get it to work, I achieved about a 97% accuracy, but because of some underlying bugs that I didn't understand, it wasn't good enough. I was frustrated and disappointed and finally gave up on it, and moved onto my next project, which I finished in about 2-3 weeks. But after that, with renewed energy, I decided to give it one more go at my problem, and spent another week at it. This time I used OpenCV in conjunction with Tesseract, and achieved almost a 100% accuracy, but more importantly, I figured out a way to get around the bug that had been dogging me on my first attempt.

I'm at the point now where I'm not a "great" web programmer, but I definitely can take a design from one of my friends, and implement it, pretty much to spec. I'm not fast, and I'm not creative, but I'm confident I can solve just about any problem I need to in order to finish my task.

3 comments

This may be a bit tangential, but may I ask what led you to decide to learn web programming? My background is in web programming, though I have much less programming experience overall than you (~5 years). For me, I feel like learning C/C++ would lead to increased understanding of general programming and better career opportunities. It seems to me that C/C++ (C++ in particular) is still relevant, and is becoming even more relevant.

And by learning C/C++, I mean really learning C/C++, not just relying the three classes that I took in college that used one of them. Lately I've been working on a C++ Windows TFTP server which has caused me to learn TFTP (very simple) and WinSock (complex so far). So I'm just curious what your thoughts might be.

To be honest, I first started out trying to learn iPhone programming, simply out of interest. Unfortunately I got caught in between the transition between Xcode 3 and Xcode 4, where the interfaces and some of the terminology changed and the books were all based on Xcode 3. It got frustrating and tedious trying to convert concepts from Xcode 3 to 4 and back, so I decided to jump to web programming, since I envisioned the back-end of many iPhone apps would be web-based, with the goal of returning back to iPhone programming. During that time, I made some pretty good progress with the web stuff, and it was pretty enjoyable so I just stuck with it. Pretty soon, I'll get back to learning iPhone programming.

Personally I think C/C++ is still relevant, and it's my language of choice, but I'm not close-minded about it. For example, in developing my OCR functionality, I discovered how wonderful Python was, because it was a sane programming language, and allowed for much quicker development and progress than C++. I'm now a Python convert, although I still have many more miles to travel before I can become a competent Python programmer. In addition, Javascript is a lot more powerful that I imagined, and it looks like a lot of people are turning Javascript into something a lot more powerful, ex. Node.js. If I had to put my money behind the languages that might really blow up in the near future, it's Javascript and Python.

As to the career opportunities of C++, I can't really speak for that because trends change quickly. The key is to be flexible and open-minded, and not get stuck in a particular pigeonhole otherwise you'll find yourself like COBOL programmers in the late 90s. You will definitely learn a lot by going the C++ route, and being "closer to the metal" as some people say, you can and will learn a lot of different concepts that aren't available to many other languages, like memory-management, etc. It might make it easier to take up other languages in the future, as well, so it's not something I would discourage anyone from learning.

I've come to accept that I "start over" because I like to keep learning. I love- no I need - to fight new problems and learn new domains. From physics to teaching to sailing to jiu-jitsu to (web) programming to business (which I thought, arrogantly, was going to be rather simple) it's what my brain craves.

It's a curse in some ways. It seems to me that my ego is under far more attack than it should be at my age, as I am never the deep-knowledge expert about any topic. And I don't bluff very well.

On the other hand, I can't seem to have it any other way. It's probably a form of arrogance: "Of course I can do that, hand me that [chalk | gi | keyboard | main sheet | ...]

I imagine we are a lot alike.

When it comes to learning new things, I do have that belief that I can do whatever I need to get things done. I've spent the greater part of my post-college life hustling to learn new things, so throwing a couple of more concepts on the pile likely won't be too different from what I've already seen.

Physically though, my back tells me otherwise... and usually wins that argument :)

> * One of the things I was working on was using Tesseract to do OCR on uploaded image files. After 3 weeks of trying to get it to work, I achieved about a 97% accuracy, but because of some underlying bugs that I didn't understand, it wasn't good enough.*

Ha, I've been working on this thing too, though I suspect for different use cases. I don't know if you were using this as a general example of how you managed to solve a problem...but this really isn't a "web programming" problem, in that it's a program that has many uses outside of a web server. In fact, it should be a standalone script that has no awareness of the web (unless it's doing something with a lot of moving parts, like recording results and doing machine learning).

In any case, the problem with people trying to learn web programming is that it encompasses many things...I'd argue that web programming doesn't really require learning HTML beyond the basic idea of HTML (and CSS)...and yet many beginner programmers spend a month or so thinking that programming consists of memorizing tags and CSS rules (nevermind cross-browser considerations)...which must be frustrating as hell.

It is a Python script I execute from a PHP file, so it doesn't have any knowledge except for the files that I am trying to scan.

I google just about any HTML issue I have, so I don't spend too much time trying to learn the intricacies of it. If anything, trying to understand why CSS was behaving as it was, was what got me closest to smashing my keyboard more than a handful of times. Stupid Wordpress.

But I don't think it's necessarily a waste of time for absolute beginners to learn and memorize HTML as their first exposure to "programming". Having a fundamental understanding of how making changes to a script or file affects the output to a web browser is something that I imagine most non-programmers aren't familiar with, so having a firm grasp of this concept will probably help them digest more advanced concepts later on. Being able to whip up a web page is probably one of the first things I would teach beginners if I ever taught a course on programming.