Ask HN: I'm a solo junior dev, what should i focus on?
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.
26 comments
[ 2.8 ms ] story [ 32.9 ms ] threadData 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).
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.
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.
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.
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.
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.
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.
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...
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.
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 will never get as strong feedback being a solo programmer - in fact, the feedback will likely be minimal.
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.
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!
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.