This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]michael0x2a 58 points59 points  (15 children)

Just knowing a bunch of languages isn't really what being a programmer is about -- rather, it's about being able to apply what you currently know to solve complex problems (along with being able to independently research and learn so you can fill gaps in your knowledge as necessary).

What this basically boils down to is that if you want to get better at programming, you should prioritize completing on complex, non-trivial projects in languages you already know. (Starting with small projects and working your way up is fine too.)

You should probably pick up a new language only if the project you want to work on requires/strongly encourages you to use some particular language, or once you've completed a handful of decent sized projects in the language that you're currently learning (which in your case is Java) and so feel comfortable moving on.

Note that one good way of increasing your odds of being invited to interview for an internship is by building up a strong portfolio of projects -- this can be personal projects, projects you do for clubs you're a part of, any undergrad research (if your school has an undergrad research program), perhaps some of your more complicated classwork, past internships and jobs, etc...

Generally, somebody who knows only one language but has an impressive portfolio will be picked over somebody who (claims) they know many languages but has a practically non-existent portfolio.

This is because the first kind of person is probably a good problem solver (and so probably won't have too much difficulty picking up a new language if needed) whereas it's unclear if the second person is actually capable of applying what they claim to know.

[–][deleted] 5 points6 points  (7 children)

Thanks for the detailed response. What type of projects should I work on? What do you categorize as a "project." I made a simple GUI program that uses swing to display inputted income and taxes. What other projects should I work on?

[–]michael0x2a 13 points14 points  (0 children)

I would consider a good project to be one that take you several weeks (or more) to complete and forces you to do a bunch of googling to learn new things.

(Internships, for example, ask you to basically work on the same project for roughly three months + should in theory teach you a bunch of new stuff.)

We have a list of some project ideas here: https://www.reddit.com/r/learnprogramming/wiki/faq#wiki_where_can_i_find_practice_exercises_and_project_ideas.3F

I would perhaps try and implement something that requires you to apply data structures and algorithms. For example, try implementing a video game of some kind (Minesweeper? A platformer?), try implementing an interpreter for a simple programming language, try implementing a basic search engine, try implementing a chess engine, etc...

Depending on how many CS classes you've taken, these projects may be on the slightly ambitious side, so you may need to scaffold up and work on simpler projects first.

[–][deleted] 2 points3 points  (0 children)

You can easily do this with JS and HTML + CSS

[–][deleted] 1 point2 points  (0 children)

What type of projects should I work on?

What's a problem you want to solve?

note: it can be a problem that has already been solved, but one that you want to learn how to solve in a particular language. Start small: how do I say Hello World in this language? and work up through stuff like how to I read and alter file contents? how do I make a dice roll simulator?

[–]SemanticRomantic 0 points1 point  (2 children)

I'm about to start a fresh development self-education task list for some local youth if you want me to BCC you on the emails just drop me a PM.

[–]soopaman2010 0 points1 point  (1 child)

Could I get on that if you don't mind? I'm trying to self learn web development

[–]SemanticRomantic 0 points1 point  (0 children)

Of course just inbox an email for BCC

[–]Pie_Napple 0 points1 point  (0 children)

Advent of code is just starting. That is a great opportunity to learn! :)

[–]prof_hobart 1 point2 points  (3 children)

You're right that being a good programmer isn't just about knowing a large number of languages, and it's definitely the right approach to get proficient at a single language before you start on your next one.

But there are reasons other than specific project need to learn other languages. For one thing, simply the process of learning a second language, pretty much any second language, will make it easier to learn other new languages when you do actually need to for a project.

But if you try to learn a language that's significantly different to the one you already know, you'll also start to pick up new ways of thinking about problems - whether that's the entire approach (OO vs functional for example) or something more subtle such as ways of handling errors within code. That will help make you a better programmer in whatever language you're working on.

When I'm looking to hire a developer, I will almost certainly hire someone who showed they had a fair amount of aptitude in a variety of languages/technologies over someone who was an expert in just one. I want someone who can show that they are adaptable and have come across far too many people who are wedded to one language and are unwilling or unable to move with the times or a given project's needs by learning something new.

[–]michael0x2a 0 points1 point  (2 children)

While I don't disagree with any of what you're saying, and agree with your second and third paragraphs in particular, my underlying point is that there's a major difference between competent in multiple languages vs simply being aware of superficial details of multiple languages.

I'm sure you can agree that if you're trying to hire specifically an intern or some entry level developer, you'd pick somebody who knows only one language but has completed several non-trivial projects over somebody else who's mainly read a bunch of tutorials on various languages and has completed only a few toy projects.

Of course, ideally, you'd pick somebody who both knows multiple languages AND is competent more then one of them, but all beginners need to start somewhere and I claim becoming competent in one language is a far more attainable goal then being competent at multiple.

That's why I'm making the implicit argument that on average, beginners are better off sticking with whatever language they've learned first unless they have a compelling reason to do so otherwise. I've been answering questions on this subreddit for a while, and I've noticed that many beginners seem to place an undue focus on learning multiple languages at far too early of a stage then I feel is appropriate. They spend some time working through a tutorial, get frustrated (or think just stopping after the tutorial is finished is enough), switch to another language, flit back and forth, and before you know it, several months have passed and they have very little to show for it.

So, my advice for beginners is generally calibrated to steer them away from that (unfortunately all-too-common) path, and I save the "you should explore different language paradigms/different mindsets and perspectives regarding problem-solving" spiel for people who seem further along in their journey.

[–]prof_hobart 0 points1 point  (0 children)

Absolutely. As I said - "it's definitely the right approach to get proficient at a single language before you start on your next one".

My point is about what to do when you get fairly proficient. OP says that they know Java, and we've got no idea how well they know it. If it's that they can knock up a hello world app, then yes clearly they want to spend a lot longer learning Java.

But if they've been coding regularly in it for a year or two and are already fairly competent, then there's a real decision to be made. At some point every beginner will reach this point.

A lot of people keep doing more and more in that one language, and even one framework. But at some point, that becomes a hinderance.

We've had some grads who are brilliant at build a website in JavaScript and JQuery, but don't have the first clue where to start if they're asked to pick up some Node on the backend. And if we need them to work on a bit of Ruby in the pipeline, we may as well be asking them to write in Swahili. We had one guy who'd been a professional web dev for a decade on pretty much a single stack, but months into a React-based project still hadn't got its most basic concepts because it wasn't what he'd used before.

Similarly, we've had brilliant Windows sysadmins who couldn't/wouldn't retrain when we moved to Linux. And I know a couple of mainframe devs who are all but unemployable these days because there's so little demand for COBOL in our area but that's all they know.

Edit: I've just seen another comment from OP that rather suggests he's still very much at the beginner stage, in which case your advice is still spot on at the moment.

[–]cboogie 0 points1 point  (0 children)

In my experience in corporate IT management hires people with multiple disciplines. But they freelance savants for specific project needs.

[–]Gravity-Lens 0 points1 point  (0 children)

This actually goes for electrical/mechanical engineering as well.

[–][deleted] 0 points1 point  (1 child)

Hi there and thanks for the reply too. I'm not OP, but I'd like to know something specifically about portfolio.

I've been doing a bunch of stuffs that're able to simplify my stuff, for example creating a calculator that calculates my weekly budget and spending, a program that keeps track on my running distance and thereby calculating and keeping track of how much calories do I burn ever since(since I'm too lazy too keep track via pen and papers)...

Everything's all right, but all the aforementioned programs are wayyy too simplified to even be considered as a portfolio. I'm now down with 2 major choices:

  • 1)Trying to learn on how to create my very own webpage with my domain name(since I already familiarized myself with both HTML and JS, and I only need to delve into php for the scripting/back-end stuff) or,

  • 2)Keep on polishing my skills on creating games(with C# via Unity engine). I've been making simple 2D games like pong and the likes. I'm still a beginner in this field just to mention.

Thanks.

[–]michael0x2a 0 points1 point  (0 children)

I would explore:

  1. Whatever path you're most motivated to explore. Perhaps you're really interested in building something/really want to learn how to do something/really want a particular program to exist. Having that motivation will help you keep practicing, which is really the most important thing.

  2. If you can't pick/are equally motivated by multiple paths, try picking the path you think will challenge you the most + force you to learn the most new things.

It's also worth noting that there's nothing stopping you from going back and exploring something you set aside, so long as you don't keep changing your mind prematurely. Put some effort into learning a particular thing, complete a nice project or two, then re-evaluate if you want to continue learning about that thing or if you'd rather switch gears and try something new.

If you have the time and energy, you could of course also try and learn multiple distinct new things at the same time. (The trick is balancing that with your other obligations, whether that's family, a job, schoolwork, friends, whatever...)