Hacker News new | ask | show | jobs
Ask HN: I'm a solo junior dev, what should i focus on?
12 points by basdevries 4204 days ago
I'm a junior dev working for freelance clients and working on my own projects. I've noticed that in the recent couple of months, I've not progressed as well as I hoped I would.

Yes, I gained experience and whenever I'm going to work with framework x again, I'll be a lot quicker. However, I don't have full insight in the tradeoffs that I'm making when chosing a certain architecture for example. I'll just code what seems logical in my head, and build further upon that.

I'm mostly coding in OO languages. Should I focus on programming concepts? Should I dive deeper into API methods?

Also, Since I'm able to 'build', there's the fact that spending more time on figuring out what approach is best, I'm developing on a lower pace.

8 comments

If you want to grow as a developer the best thing to learn is normally always the same.

Data Structures.

Nothing will help you more in interviews, day-to-day dev work, general problem solving, and even application planning. The goal is eventually to transition your mindset into thinking about structures holding your data, and how they act, and interact. Once you do this the optimal architecture, and what you need to write as code becomes clear as day (really regardless of the language).

How should one go about 'training' that? Is it experience, or are there books etc? I'd love to dive into that.
Tons of online resources. Books are all a bit dense. The ones I'll suggest are bit hard to get into, I'm a huge fan of The Art of Computer Programming Vol 1-3 all a master piece, but very very dense, very very mathy and challenging even if you've taken college level discrete mathematics courses. But a HUGE amount of the field is contained within them, and the information density is staggering. Donald Knuth's writing is just absolutely brilliant and pointed in places.

Simply searching on Amazon, "Your language of choice" + Algorithms/Data Structures I.E.: "Javascript Algorithsm", "Ruby Data Structures", "Java Algorithms", etc.. Will likely pull up a few options, check reviews, find something in your price range and read it.

A lot of it is self study. Just be willing to explore docs, watch videos, a lot of reading, try things out on your own.

If I were to recommend three of the four volumes of TAoCP, I would drop Volume 2: Semi-Numerical Algorithms in favor of Volume 4a: Combinatorial Algorithms, Part 1. Developers, junior or otherwise are simply less likely to find themselves in situations where there is a good reason to implement a psuedo-random number generator or a complete numeric system than to wind up dealing with problems of non-polynomial order or boolean functions.

Of course, I don't know why anyone would recommend three but not all four if that were an option, so I guess I really could just say, there's no reason not to get volume 4a too, for a person heading down that road.

There are tons of books on Data Structures, a lot of them are super interesting too. You can Google data structures and algorithm books, and you will get a crazy amount. I have a good amount because I just finished the class in school. One of the books I like is Introduction to Algorithms, 3rd Edition. There's also a lot of college's that have the course and all of their assignments are online if you wanted to do them. They are super interesting, like binary search trees are cool, hash tables and the hash functions, linked list, graphs and the algorithms that go along with them. Are so interesting and once you know them they can lead to so much stuff, its exciting.
Just to counter everyone who says "learn another language like Haskell", I completely disagree.

You're at the point where you know some language and OOP at a decent level. You now need to invest time learning things like data structures and algorithms that are APPLICABLE to your work.

Keep adding incremental knowledge, but make sure it is having a direct benefit to your work at all times.

The "learning paradox" of having to master languages repeatedly is a waste of time at a junior level. You'll continuously invest in a new language without ever finding it applicable (eg. "learn java, learn JS, learn CSS/HTML, learn python, learn ruby, learn haskell, learn rust, then learn x-framework for each language, learn y-framework cause someone on the internet said x-framework is too bloated, learn this, learn that ...").

As your questions on line 3 asks, I say invest in the higher-level concepts that work across languages. Focus on a domain (some language, 1 or 2 frameworks, a DB) and stick with it.

And, as others have said, find a mentor. If you want to keep freelancing, you'll find a mentor at a meetup. You will definitely gain a lot from experience over a book/tutorial in certain situations.

> I'm a solo junior dev, what should i focus on?

Beyond technologies-- Focus on building a solid consulting practice, client management, how to prospect & pitch new business. Recommend reading Alan Weiss, http://www.goodreads.com/book/show/260218.Million_Dollar_Con...

Depends on your planned career path- do you want to run a business, or be a developing badass? Few can do both extremely well- If its development, move towards learning more about Software architecture, including SOLID principles, Patterns, best practices(as it pertains to Computer Science as a whole, not a particular technology or framework). While doing this, blog about it so your current and future clients can see your humble nature (rare for up-and-coming- to experienced developers) and progress. More importantly, if you think about doing a personal project or have an idea for an app- don't focus on making money, focus on the knowledge and experience gained through the work itself.
how do you learn how to make software architecture decisions and learn solid principles? I am struggling with this myself, my current position is about solving bugs and maintenance, and while this may be a godd position to learn how more seniors implement certain features i often feel that i am not learning how the decisions about the architecture, and due to the senior members working remotely it's difficult to ask them about it.
also- check out meetup, find others in your area that are interested in development and grow together.
I think the best way to learn to be a better programmer in your position is to find a more stable job with a good team of people. Learn from other people's experiences and mistakes. Working as a freelancer early doesn't have many advantages if you want to build a career, in my opinion.

Other than that - Keep trying different things. Go deeper with the frameworks and libraries you use to understand why do they work the way they do. Read about things that are interesting to you and you have some use for. When you have a problem, don't just "fix" it, understand exactly where, why and when it's happening.

Agree 100% - I only am now starting to approach freelancing seriously after 2 years of development at several companies, and I found I have learned a lot from working with other people. Working with other people means you can bounce a lot of ideas between each other and you can see how others code in code reviews or just browsing their code.

You will never get as strong feedback being a solo programmer - in fact, the feedback will likely be minimal.

There is also one other disadvantage of being a solo junior dev - you will often work on very simple things. Complex systems usually require more than one person, and even if you are working as a junior dev who is just assigned tasks, you get to see how larger applications are built and gradually get into the design process. This is not something you get when building simple web apps as a freelancer.
I'd agree with that. My first 4-5 years as a programmer were solo. Then I worked on a team for a year. I learned more in that year than I had in the other years combined.

If being on a team fulltime isn't possible, you can always contribute to guided/managed open-source projects in your spare time, or go to meetups, hackathons etc. Anything you can do to get around more-experienced devs will help you in the long run.

You need a mentor.

Freelancing as a junior dev is not a good move. Find a full time position somewhere that will train you and give you access to more experienced developers.

As a counterpoint anecdote, I did freelancing as a junior dev and believe I've turned out alright ;)
Interesting, how did you turn out? And how did you turn out different from other people (with a mentor)?
I'm not sure to be honest. I know about 15-20 languages and have written at least a 500-1000 lines in each of them (most more), specialize in Python, trying to specialize in Haskell.

Did Django web development for quite a while. Now I'm working for a large company using Coldfusion (bleh), PHP, and some Python.

I frequently feel that I'm not good enough and that my knowledge is in the wrong areas though. I've learned a lot about accumulating domain knowledge and working with legacy codebases lately.

A huge blind spot I had was only passing familiarity with mysql, being used to only using ORM's. I've mostly remedied that however and it's something I feel most webdevs should know more about.

So... I can't really answer either of your questions and I'm not sure it would be economical for either of us to try and test it. However I'm open to ideas!

he turned out alright
Get involved in the open source community. You will be able to see how bigger systems are built. Right now you know what you know and you know what you don't know. But the gaping hole is that you don't know what you don't know! Unfortunately working solo can be a bit of a trap in that regard.
Keep reading Hacker News, cross your fingers and learn Haskell
I really do support your last statement (even if you made it as a joke).

OP stated s/he comes from an OOP background, and expanding into FP is a big step into expanding the ways you think about programming, and gives you new tools to solve problems with.

My job is still OOP, but the experience I've gained learning FP has helped me a lot to come up with different solutions I may have never thought up before.

I am excited to dive into FP, however, there doesn't seem to be a 'good' language yet. I noticed that oCaml is running up but that's still a bit too much 'scientific' as you might say. eg it doesn't really come close to anything web/app related. If I'm wrong, please tell me! I'd love to do FP.
Common LISP is a great language, but it spoils you since it has so few restrictions, its kinda in a class of its own because its just so unrestricted.

Scala is a fine language, but limited, largely serves as gate way drug to other FP languages. Its a very good starting point.

Haskell is odd and the type system is I feel restrictive. Also the community is really addicted to big mathy words. I do love its notation at the same time :\

F# is pretty much universally loved (from what I gather, I haven't used it myself), and now that the .NET run time is unbolted from windows it might start gaining traction.

oCaml I haven't used so I can't comment.

Erlang is VERY popular, especially with the backend FP crowd since it does concurrency very simply. I haven't used it.

> Haskell is odd and the type system is I feel restrictive.

Can you elaborate on this? After using Haskell for some time now I can't seem to come up with use cases where the type system is/would be restrictive.

A lot of people are swearing by Clojure.

I've been learning, myself, and really enjoying myself.

It seems to have a pretty solid web ecosystem, can use the best parts of java, and is a lisp with optional mutability for when you feel you need it.

I'm not disappointed I chose it, I can say that much.