12 ms·
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.
- valarauca1 12y agoIf 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).
- basdevries 12y agoHow should one go about 'training' that? Is it experience, or are there books etc? I'd love to dive into that.
- valarauca1 12y agoTons 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.
- brudgers 12y agoIf 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.
- jimkri 12y agoThere 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.
- niche 12y agoKeep reading Hacker News, cross your fingers and learn Haskell
- valarauca1 12y agoI 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.
- basdevries 12y agoI 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.
- valarauca1 12y agoCommon 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.
- codygman 12y ago> 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.
- JSeymourATL 12y ago> 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_Consulting http://www.goodreads.com/book/show/260218.Million_Dollar_Con...
- pil4rin 12y agoDepends 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.
- pil4rin 12y agoalso- check out meetup, find others in your area that are interested in development and grow together.
- victorhn 12y agohow 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.
- lukaslalinsky 12y agoI 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.
- MalcolmDiggs 12y agoI'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.
- Bahamut 12y agoAgree 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.
- lukaslalinsky 12y agoThere 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.
- hackerboos 12y agoYou 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.
- codygman 12y agoAs a counterpoint anecdote, I did freelancing as a junior dev and believe I've turned out alright ;)
- basdevries 12y agoInteresting, how did you turn out? And how did you turn out different from other people (with a mentor)?
- mrits 12y agohe turned out alright
- codygman 12y agoI'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!
- Warewolf-ESB 12y agoGet 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.
- phantom_oracle 12y agoJust 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.