Open Side Menu Go to the Top
Register
Early Career Advice (After the job hunt) Early Career Advice (After the job hunt)

06-11-2016 , 09:31 PM
We've had plenty of threads about getting the first job, but I don't know if there are any with good advice for what to do once you actually get the job.

There are many potential "career goals" I suppose. I want to be great at what I do, which is currently web development that I want to expand to more general programming and knowledge of computing. The pie in the sky goal is to be a quietly sought-after superstar if it's true that coding is moving to a star model. So just whatever gets me closest to that.

As a bootcamp grad I feel I need to shore up on the type of things that the kids learn while getting a CS degree. The founder of my school recommends a post-job course of study something like this:

- Read "The C Programming Language". Even if you'll never need C for a job, learning it gets you closer to the hardware and gives you a better idea of what's going on. At least two others including my manager have recommended this, with one dissenter.

- Read The Structure and Interpretation of Computer Programs.

- Read something on operating systems such as Computer Systems: A Programmer's Perspective or Tanenbaum's Modern Operating Systems.

- Additional topics would be networking and concurrency but I have no book or course recommendations on those.

What do you think? I'm likely to buy The C Programming Language within the next week.

As a web developer, I feel like networking maybe should come sooner. Like I don't have a great sense of what the web is actually doing behind the scenes, or how various systems interact at work. I can use the tools, but I often am clueless as to what the tools are doing. So there may be more field-specific knowledge that I should get before diving deep on hardware.

Coursera, edx, etc. recommendations are fine as well of course.

For people who've been working 5-10+ years in tech: what do you wish you'd known/done differently in the beginning. Or if you did it all correctly, what was it?

If you think pursuing engineering management or PM'ing is good for whatever reason, please share as well.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 02:16 AM
I don't have a coding job in any field, so I can't speak from that experience, but I've been programming for over 20 years and am always learning new things. I think there a few basics that are fairly timeless that can inform your knowledge and approach to more high level coding tasks like working with databases, website design and mobile app development.

It's pretty clear just as a user of these things that the majority of developers have no idea what they're doing, when websites can bring the monster machines we use today to their knees with all of their cludged together interfaces and scripting, and it's even worse on mobile with websites and apps. Part of that problem seems to be with the automated tools and libraries that people use without much thought or knowledge to build them. Gluing a few libraries together with some scripting or a high level language like Java, C# or Obj. C/Swift is pretty easy and people without much knowledge of what's actually going on can do a lot, but that comes at a cost to efficiency and maintainability and we see the results of this every day when these coders and designers aren't making good and informed decisions and websites and apps run like crap.

Those basics I mentioned would include for one, memory management, and learning how data is actually stored and moved around at the hardware level. A lot of optimization involves reducing the allocation and movement of memory, working with a good debugger and timing tools/profilers to find where to focus your optimizations on. Another basic would be API design and architecting a multi-platform desktop program in a lower level language. It's good to know how to efficiently abstract operating system specific functionality from platform independent code. Knowing how to create a clean interface between the application specific layer and operating system layer has a lot of benefits to maintenance and portability, and is a skill useful even for mobile app and web development where you're constantly working with third-party frameworks and APIs.

If I were in your position, I would want to tell myself to start out learning C. The C Programming Language is a good start. After that, I would look in to Handmade Hero. This guy does a daily stream on Twitch where he's building a 2D game by writing everything himself in C on Windows. The only outside functions he calls that aren't written by him are a few system calls to Windows to get a chunk of memory, a window handle to output a bitmap buffer for graphics, sound and gameplad/keyboard/mouse input, and a call to output a sound buffer. Just the initial 5 videos, his introduction to C and the following first 10 days of the main stream are required viewing for anyone with this kind of interest and do a lot to impart enough knowledge on those basics I mentioned above to get you going and asking the right questions for further study.

A bit rambling, and a bit of a shill for Handmade Hero, but I think starting from a basic knowledge of C and learning from that series is a great starting point for general coding knowledge that you can then build on, and I would've killed to have something like that back when I was starting out. Instead I spent a lot of time reading books on coding practices like OOP design patterns, functional programming, etc., and writing crappy programs in QT, gaining bad habits that I'm starting to unlearn.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 02:34 AM
I definitely suggest getting C Programming; A Modern Approach by King. Way better than K&R and about as mind-expanding as SICP.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 06:41 AM
I would higly recommend the book, Abstractions in Software: Theory and Practice, except it hasn't been written yet.

I have a really simple recommendation, go ahead and spend the money and time getting a university education taking as many CS and CE courses as possible. I might even be tempted to get something like a university studies degree where you don't have a specific major but can just focus on CS and CE courses. Embrace learning the math underpinnings of the various CS and CE topics you will encounter. I think if you did this you'd discover topics that interest you more than you could imagine.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 07:40 AM
Quote:
Originally Posted by Baltimore Jones
There are many potential "career goals" I suppose. I want to be great at what I do, which is currently web development that I want to expand to more general programming and knowledge of computing. The pie in the sky goal is to be a quietly sought-after superstar if it's true that coding is moving to a star model. So just whatever gets me closest to that.
Before this turns out into yet another "which books do you guys find awesome" thread, I'd like to get back to what you said in the beginning.

I would recommend being more specific.

"I want to be great at what I do, which is currently web development"
That part alone is way too vague. It's far to broad a set of potential things to improve on to find a solid route to get there. Web development has a ridiculously wide set of problems you could work on to get better by just wanting to be better at everything that's part of it.

Focus on a tiny subset. Master that. Find the next. Repeat a few times.
Find how those mastered subsets together can form a bigger set that could work. Then find routes to get those work together in different environments, showing different strengths and weaknesses. Master those. Repeat yet again.
Pretty much a bottom-up approach of masteries.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 04:47 PM
Have to note that you didn't include an algorithms book. Why?
Early Career Advice (After the job hunt) Quote
06-12-2016 , 05:06 PM
Quote:
Originally Posted by daveT
Have to note that you didn't include an algorithms book. Why?
I knew enough algorithms to get through interviews. There's certainly more to learn there but I feel it can wait until such time as I'm gearing up for another round of interviews, and that may be preferable so that it's fresher at that time.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 05:19 PM
Keep learning outside of work and you will be ahead of most developers. Many programmers do their job, and do not think about programming any more than that. I was like this for many years until I left programming for poker.

I have recently been getting back into programming after a long break and have read over 50 programming books in the past couple years. It has helped me a ton in improving my programming skills. Additionally, it has reinvigorated my passion for programming.

The question is not so much which one or two books will make you better, but that you keep up the habit.

I would recommend The Linux Programming Interface (Kerrisk, Michael), and the Art of Computer Programming (Knuth). They are extremely long books, but well worth the effort.

The other thing is to find a language or subject that really interests you and go deep into it... buy all the books, watch videos, go to conferences, etc.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 08:31 PM
Quote:
Originally Posted by Baltimore Jones
I knew enough algorithms to get through interviews. There's certainly more to learn there but I feel it can wait until such time as I'm gearing up for another round of interviews, and that may be preferable so that it's fresher at that time.
It would take about 6 months for you to get through Corman.

Also, as a note, to get the most out of SICP, you'd want to have at least calculus and a class in first order logic.

For Corman, you'd want probability, a second class on calculus, an intro to proofs, and linear algebra.

These aren't books you just dive into. They'll force you to walk back and learn other things.
Early Career Advice (After the job hunt) Quote
06-12-2016 , 11:44 PM
Quote:
Originally Posted by kazana
Focus on a tiny subset. Master that. Find the next. Repeat a few times.
Find how those mastered subsets together can form a bigger set that could work. Then find routes to get those work together in different environments, showing different strengths and weaknesses. Master those. Repeat yet again.
Pretty much a bottom-up approach of masteries.
Any specific recommendations or an example of what you envision as mastering a subset?
Early Career Advice (After the job hunt) Quote
06-13-2016 , 12:17 AM
Quote:
Originally Posted by Baltimore Jones
Any specific recommendations or an example of what you envision as mastering a subset?
Master frontend stuff --> master backend stuff --> master full stack frameworks might be a logical progression if you are starting out in a frontend dev role.
Early Career Advice (After the job hunt) Quote
06-13-2016 , 06:17 AM
Quote:
Originally Posted by Craggoo
Master frontend stuff --> master backend stuff --> master full stack frameworks might be a logical progression if you are starting out in a frontend dev role.
Still too vague in my opinion. But may serve as general direction to prioritise topics.

Quote:
Originally Posted by Baltimore Jones
Any specific recommendations or an example of what you envision as mastering a subset?
E.g. Mastering B-trees.
Which variations are out there? What does it do well? What not? How would I implement one in <insert your go-to language>? Where would I want to use it in my own code?

After that you could want to master another container type that complements the pros and cons of B-trees. Maybe add a third container mastery just to have it in your tool belt.

Then start looking at the bigger picture. When using those in your projects, where did other questions (not related to the structures themselves) arise? What would I want to master to be able to answer those with confidence?
Early Career Advice (After the job hunt) Quote
06-14-2016 , 09:10 PM
Quote:
Originally Posted by daveT
I definitely suggest getting C Programming; A Modern Approach by King. Way better than K&R and about as mind-expanding as SICP.
I like the King book, but K&R still stands the test of time as arguably the most complete and concise language tutorial ever written.
Early Career Advice (After the job hunt) Quote
06-14-2016 , 10:31 PM
Wow, it's under 300 pages? I thought for sure it'd be over 600.
Early Career Advice (After the job hunt) Quote
06-15-2016 , 01:05 AM
Quote:
Originally Posted by codeartisan
I like the King book, but K&R still stands the test of time as arguably the most complete and concise language tutorial ever written.
I think the correct answer is to get both books. Each brings something to the table, and there is no good reason to not get both.

I like King better mainly because the exercises are among the best I've seen in any text book, and unlike certain books, you can actually do all of the exercises. Sometimes concise isn't what's needed. For sure, if you have already been swimming around in C, then K&R is definitely better, but if you are learning the language from the ground up, repetition is going to be fine.

My only complaint about King is that, for some people, it may be too complete, since he covers many nooks and crannies, which may be my idea of good only because I'm a super nit and enjoy excessive detail.
Early Career Advice (After the job hunt) Quote
07-05-2016 , 05:25 PM
As you work on stuff for your job, there should be a lot of questions you have about why things work the way they do. These should be the the things you begin learning. Off the top of my head, if you're in Web Dev, some things you might be curious about:
1. How DNS Works
2. SSL
3. REST
4. How firewalls work
5. Security in general--how you could write an application that is vulnerable to hacking
6. How a Browser works and the differences between the popular ones
7. Databases
8. Automated Testing--ie Selenium
9. Load Balancers
10. What causes latency in an app

etc.
Early Career Advice (After the job hunt) Quote
07-05-2016 , 08:08 PM
Quote:
5. Security in general--how you could write an application that is vulnerable to hacking
-sql injection
-cross site scripting
-authentication issues
-essentially never trust the info the user provides

does that seem like a good start?
Early Career Advice (After the job hunt) Quote
07-05-2016 , 09:39 PM
The reality is that most of the additional learning you will do is most likely going to be on the job. If you get pidgeon-holed into a very specific role then you probably wont' be doing too much learning between job 1 and job 2. I would advise trying to get assigned to roles that don't fit your normal role. For example, I've been trying to get assigned to some GO tasks since a lot of our relic code is being re-written in GO but no luck yet. I am one of the frontend guys.
Early Career Advice (After the job hunt) Quote
07-05-2016 , 10:43 PM
Quote:
Originally Posted by Victor
-sql injection
-cross site scripting
-authentication issues
-essentially never trust the info the user provides

does that seem like a good start?
The best place to start is read and follow the security docs on whatever framework you are using, but the top of a massive rabbit hole:

Why should you use bcrypt and not MD5 to store passwords in a database? Why would you use HMAC?

What happens if someone manages to shell into your server? Are you using unique and strong passwords for each user, especially root? Are you able to log into your server as root? How do you secure your database's password?

How do you safely do file uploads? Where should you store these files? What permission settings should you be using for the folder you keep these files in? What file size is a good max?

How do you minimize or prevent a DDOS attack?

You find 2 conflicting articles on "best security practices?"

This site has a ton of interesting articles: https://www.owasp.org/index.php/Main_Page
Early Career Advice (After the job hunt) Quote
07-05-2016 , 11:01 PM
Realistically almost all significant career moves forward are going to involve someone deciding that you're not merely a high-level contributor but someone who's able to raise the productivity of others or fundamentally change the direction of your team. It's about being a multiplier - in an organizational context, that's not just the most important thing but it's also what's more visible and easier to assess. Ultimately I don't think it's about learning X, Y or Z but being able to understand, whether through social and organizational skills or technical or business insight, what really matters at a level or two above where you typically do your work.

The only other advice I have is this: if for some reason you can't do what I'm recommending above - learn whatever it is that you need to understand the big picture and use that knowledge become a multiplier - or it doesn't appeal to you (maybe it involves learning something you have no interest in), get a new job where you can do this. For example, if at your current job, the only big picture beyond your work involves understanding Sales/Product/UX, and you'd rather go deeper into technology, go get a job at a bigger tech company where the big picture beyond your immediate work is still a bigger technical picture, understanding of which involves learning technical things you find interesting. It's much easier to learn whatever it is talked about in this thread if you have a real-world problem that involves it. More cynically, employers are generally skeptical of things you say you know, but haven't actually used to solve real-world problems.

Wondering about what you need to learn in order to further your career is a sign that you need to go find a different job or at least take your current job a lot more seriously. It means your job is either not challenging, the challenges it's providing aren't interesting enough for you to learn to tackle them.
Early Career Advice (After the job hunt) Quote
07-06-2016 , 06:52 AM
Quote:
Originally Posted by Craggoo
The reality is that most of the additional learning you will do is most likely going to be on the job. If you get pidgeon-holed into a very specific role then you probably wont' be doing too much learning between job 1 and job 2. I would advise trying to get assigned to roles that don't fit your normal role. For example, I've been trying to get assigned to some GO tasks since a lot of our relic code is being re-written in GO but no luck yet. I am one of the frontend guys.
This is good advice in my view. I would add to this, if all you get is lip service about your desire to get GO assignments, find a new job.
Early Career Advice (After the job hunt) Quote
07-06-2016 , 10:02 AM
Quote:
Originally Posted by Craggoo
The reality is that most of the additional learning you will do is most likely going to be on the job. If you get pidgeon-holed into a very specific role then you probably wont' be doing too much learning between job 1 and job 2. I would advise trying to get assigned to roles that don't fit your normal role. For example, I've been trying to get assigned to some GO tasks since a lot of our relic code is being re-written in GO but no luck yet. I am one of the frontend guys.
I actually dealt with this type of thing where my first job was really Systems-oriented, and I wanted to get more involved with programming. So, I just started writing scripts for them with random ideas I had to automate and improve things. Out of the 15+ I wrote, they only put 5 into production. But, you can put scripts that never made it to production on your resume to market yourself to other companies. Then in interviews you say, "This is the problem I saw, this is how I tried to solve it, etc.". That's how I made the transition into DevOps at a different company. In short, you don't need to wait for your company to assign you GO tasks--just get started on your own, and as you accomplish stuff, add that to your resume/LinkedIn profile.
Early Career Advice (After the job hunt) Quote
07-06-2016 , 03:14 PM
I haven't read the other responses but here's my opinion, in my particular order:

1. Program outside of work, preferably something different than what you do at work if you're already at an intermediate level in the work tech stack. If you're using an OO language, go learn a functional language. .NET developer? Go learn Rails. You get the picture.
2. Read, read, read.
3. Talk at meet ups and conferences in your area. Networking is super important even among a crowd dominated by introverts.
Early Career Advice (After the job hunt) Quote

      
m