Tuesday, July 17, 2018

Advice to an Aspiring Web Developer

A 15-year old just posted a question to a forum I frequent. She's getting ready to graduate high school "soon" because she's been taking a lot of extra classes. So now she's trying to decide whether the inevitable mountain of debt is worth going to college.

She's really interested in computer science and web front-ends. She considers herself fluent in javascript, html, and CSS.

She's had one response since she posted last night. It was basically "Web development technologies are a joke. They're really lumped into a single course in most degree programs. Learn a real programming language like python, ruby, or php. Then focus on the important stuff like algorithms and data structures. Oh, and work on your portfolio."

My response is ridiculously long and stream-of-consciousness, but I decided to share it here anyway:

It is good to start thinking about it early. I won't claim wisdom, but I do have experience. Maybe there's a worthwhile nugget in this meandering response.

The point about location is a big one. Do you live somewhere where you could start as an intern and work your way up the chain? Are you willing to move somewhere you could?

A lot of the answer really depends on your long-term goals. It's important to remember that this probably will change over time. Having a college degree, especially starting out, provides a lot of flexibility down the road. (I work with a guy who's decided he's getting too old to keep up with all the crazy new tech. He's working on his doctorate in the evenings so he can get a teaching job that lets him work with cool stuff without the demands of corporate pressure to produce things that customers want). If nothing else, it shows that you can cope with arbitrary rules, follow instructions, and achieve goals.

There's also a lot of value in things like having access to both professors and other students who are really exploring independence for the first time. This is vastly more true if you can afford to go to a school in one of the startup hubs. Paul Graham's essays are well worth reading. This is also probably the best time of your life to get in on the ground floor of a startup (or 6).

The courses don't hurt. It sounds like you're enough of a go-getter that you could get the same actual knowledge out of sites like coursera. Then again, if you're the kind of person who finds classrooms and structure and schedules appealing, college may be worth the price to you. There's also value in taking some time to explore a wider variety of topics. As long as you don't actually graduate, you can get a lot of financial assistance (most people won't warn you that this mostly cuts off once you do graduate).

You'll probably never have a time in your life when it's easier to get a college education. Once you enter the work force full time, it's tough to find the time.

I know a person who graduated from college when the job market was awful, went back and got a master's, then still couldn't get a job until he lied and pretended that he had some job experience. He eventually got fired when a manager found out about the lie. But, by then, he had experience and seems to have been fine since (we haven't stayed in touch). So...it wasn't ethical, but it worked out well for him.

Then there's another programmer with whom I worked several years ago. Before college, he worked at KFC with a classmate. He got a CS degree. The classmate stayed at KFC. When I knew him, we were both junior programmers in dead-end jobs. His classmate was a district manager at KFC, making money hand over fist, with tons of perks like access to the corporate jet.

Statistically speaking, I think long-term you'll probably be better off *financially* by just skipping college and diving in to an entry level job. Aside from the debt load (which really shouldn't be all that much for an undergrad, if you live frugally), you'll have 4-6 years (at least...it sounds like you've been a real go-getter and plan to graduate high school early) of experience + salary under your belt when your classmates are starting to look for their entry level jobs. A major difference there is that most of them will think they know everything, when, mostly, college just taught them to produce garbage that  will never be useful long-term. (Homework assignments are fine to get the basic ideas, but writing something that's going to still be used in 10 years is a different kettle of fish).

Don't  buy the idea that javascript isn't a "proper programming language." It has a lot of rough edges, but it's one of the most commonly used languages on the planet. You can go a long way using javascript on both client and server. It is worth learning other languages: they all have strengths and weaknesses, and you can really broaden your perspective by learning a wide variety (Peter Norvig has a great online essay about mastering programming in 10 years). But don't fall into the trap of thinking one is better than the others. Each one is really optimized for one or two things. Figure out what those are: why did someone create this language, and why do other people use it?

Definitely do build a portfolio. Find open source projects to contribute to (check out the Aspiring Blacksmiths guild here). Build web sites that you can show to demonstrate you know what you're doing. If you're going to focus on front-ends, it's really all about the user experience. Dig into things like graphic design. Study ways to present information (Edward Tufte is a great source here). Get used to tweaking CSS to make your sites beautiful on all the different browser versions (don't forget mobile!). Speaking of mobile, you should definitely have some native phone apps in here too. Don't do it for the sake of the portfolio: work on projects that you find interesting/challenging. Just be mindful that they go places where you can show them off on your resume. I have seen people get hired because they had a link at the top of their resume to a cool, tasteful site that they built. They did good at the interviews also, but nobody involved past the HR level cared about anything past the "here. I can do this for you" wow factor.

I think that one of the crazy things about this field is that a computer science degree doesn't necessarily prepare people to be great programmers. Some of the best programmers with whom I've worked got a degree in either math or music, but fiddled around with programming and built stuff that interested them (and maybe took a few classes as electives) while they were in school. I've also worked with great programmers who have CS degrees, but they have a tendency to think they learned all they needed in school. One of the joys of this field is that you've *never* learned all you need, because it changes constantly (web UI more than any other area).

There's another angle to this. Big parts of what you'll get from a CS degree will be pretty useless in terms of building web UIs. I have seen web devs struggling with algorithms and data structures, but it's been extremely rare. Mostly, they're trying to deal with insane levels of complexity that stem from a) interacting directly with humans b) coping with all the crazy things that can happen when things go wrong on the server side and c) well, javascript's "rough edges."

Well, aside from the bigger-picture "make it beautiful, and don't make your users think" sorts of questions. The people who are good at this and the actual programming part are golden.

Personally, I think that any program that has a single course for "web programming" is probably short-changing its students. In a lot of ways, I think that building something like Habitica is far more challenging than, say, a database engine.

Good luck. You're already well ahead of the curve just by asking the questions.

No comments:

Post a Comment

Thanks for leaving a comment! We love to hear from you!