DEV Community

Cover image for What Should be in a Coder's Toolbox?

What Should be in a Coder's Toolbox?

Sam Jarman 👨🏼‍💻 on July 22, 2017

As Developers, we’re often met with many different technologies, all new and foreign to us, and with someone telling us it’s the next big thing and...
Collapse
 
amuellerml profile image
Andreas Mueller

I feel like this should have been called "every web and app coder", not "every coder". Nearly all of these are web technologies... Or is this just a symptom of the death of general purpose computing?

"I genuinely believe any developer should be able to do any task." So where's the linux kernel drivers? Or your gui toolkit? Or your differential equation solver? I know so many coders that never touch any of the technologies you mentioned.

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Andreas! Thanks for reading and yeah, fair comment. This post is definitely skewed to more web/app developers than lower level coders. I'd wager there are more of those, I guess?

I'd put a low level language in the toolkit too, such as C or Rust.

Based on feedback from this post (originally written quite some time ago) I think I'll probably do a V2/revised with that added :)

Appreciate the comment!

Collapse
 
amuellerml profile image
Andreas Mueller

I'm actually mostly working on data science in Python. But also not using any of these tools. It's not necessarily the language, though yes, system languages are also important.
But writing Python doesn't necessarily mean doing web stuff. You could do medical imaging or self-driving cars or weather forecast, and write Python and not use any of these technologies.

Thread Thread
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Of course! :)

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Kinda echoing @amuellerml here, but I've been coding for many years, and I've only ever needed one of these (a scripting language) in my work. I'm a game and game engine developer, and I spent a lot of time creating libraries to that aim. You might consider re-titling. ;)

On that note, I think "full stack" is something of a misnomer as well. You're presumably doing web development, which is fantastic...but you aren't actually working with a huge part of the "stack" - the kernal, assembly, nor any of the low-level languages your technologies are built on. You're not messing with a GUI toolkit (you've got a pre-built web framework for that). Not to say you need to - it's pointless for your work - but it's still a legit part of the stack that coders actively work on. :)

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Hey Jason,

Yeah, once again, fair comment. I probably should have defined full stack up front, as everyone kinda has a different definition in their head about it.

As I said here a revised edition will make more of an effort to consider game programmers too... which are almost in a different category! I'll think about how to make it work.

Keep crushing it! Gamers gotta game.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Well, there's a wide range among game programmers, too. Someone using Unity doesn't need the same tools as someone using PyGame, nor the same tools as someone (like me) building their own engine.

To be honest, there is very little all the branches of coding have in common. Probably an editor or IDE, a debugger, and a VCS. The rest varies.

If you'd like to know my company's complete stack, check out: mousepawmedia.com/developers/techn...

Thread Thread
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Thanks Jason! I'll take this into consideration for the next version of the post. I appreciate the insight here :)

Collapse
 
bdmorin profile image
Brian

The difference between a queue and a stream is also important, but this isn’t the time to cover that.

Is be interested in reading more about this topic.

Collapse
 
anthdotlee profile image
Anthony Lee

Curious about the same thing. My understanding is Kafka fits a queue more than a stream. Where Apache Storm would be more stream processing.

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

The difference, to me at least, is that Queue items are removed, where as stream items are observed.

RabbitMQ, for example, you remove from the queue and ACK them as you do so, whereas Kafka or Kinesis, you just observe, but keep a note of where you are in the read process.

Does that make sense? :)

Thread Thread
 
anthdotlee profile image
Anthony Lee

It does! Thank you.

Collapse
 
craser profile image
Chris Raser • Edited

Great post. Solid advice. I'd add: a test framework and a mocking framework. (ex. jUnit/Mockito/Powermock.) Getting proficient with these tools and using them will help you get things done faster, and radically improve the quality of your output. And it helps your team watch each other's back. If there are tests for your code, nobody's going to accidentally break it, and vice versa.

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Totally agree Chris, and I think my revised post will include a testing framework! (I've played with a few... I use RSpec daily, and have used many others, such as jUnit, Kiwi, KIF, XCTest and more!)

Thanks for bringing it up! Tests are SO important and I'm embarrassed I forgot them, if I'm honest haha.

Collapse
 
codemouse92 profile image
Jason C. McDonald

Please pardon the little promotion here, but I actually wrote a testing framework, Goldilocks (part of PawLIB), for C++ that might work in scenarios where others might not. I wrote about it in the third part of this article.

Collapse
 
craser profile image
Chris Raser • Edited

Don't be embarrassed, Sam! This is a solid article. It seems to be aimed at Jr/mid-level web devs, but I've been doing this for 15 years, and I got plenty out of it. Cheers!

Collapse
 
maxwell_dev profile image
Max Antonucci

Really like this post, as a junior dev it's certainly got me thinking about how I'm expanding my toolbox. My one bit of feedback is when you mentioned Node.js as a Web Framework. Node.js isn't a web framework itself, but something like Express or Sails would be different web frameworks that node can use. In a similar vein, Laravel would be a web framework for PHP.

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Thanks Max! Yup, fair correction. I guess I was thinking of Express at the time! :) I hope my point wasn't lost though.

Collapse
 
okolbay profile image
andrew

I would add containerization/replicatable env tools - virtual box, vagrant, docker (swarm), kubernetes

after all, you are not running mysql and java and god-knows-what-else on your bare mac (or do you?))))

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

I use Docker for mac - thanks for the addition, I think it's valid! :)

Collapse
 
kr428 profile image
Kristian R.

Well... I agree with some of the thoughts stated in other comments (about this list being pretty much web-dev centric), and add some other point: I'm not convinced you need to be able to be into that bandwidth of technologies.

But I personally think you should have at hand some kind of tooling, workflow, framework set to give you the chance of building and running a basic application, and be it a prototype or a demonstrator. You should have a toolbox to get some business problem solved in code, and you should be able to get this code running on your future customers environment as fast as you can.

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Hey Kristian, thanks for the comment!

Sure, you don't have to be into this many as above, but what works for me, to achieve what you're striving for above, is tasting a bit of every technology so I can get a feel of what the best solution might be when I come across my next problem :)

Collapse
 
warb profile image
Craig Warburton

Great article Sam! I’m an infrastructure architect learning to code and this (along with the comments so far) provides me a with a great high level overview of what I should be looking at. I’m already working through a full stack course so it’s goid to know that I’m on the right tracks.

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Nice Craig, I'm glad I could help :D

Collapse
 
aziflaj profile image
Aldo Ziflaj

Why not throw any embedded systems programming skill in the mix? I mean, it's coding...
Point being, you don't actually need all these skills in your toolbox. Knowing what they are and where/why to use them, sure. But actually learning them all in a professional way takes a lot of time, and just using them in a single project doesn't always count.
More important than being a master of all trades, IMO, is being able to adapt to different environments. Going from front-end to back-end or vice versa shouldn't be a big hustle, but I don't expect a React.JS/Native developer to know anything about message brokers

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

(This is definitely an older post for me, so I've had some more thoughts since publishing)

I think the idea is that every good engineer should know what they dont know.

And, on the contrary, I think a frontend JS dev should know about message brokers, often used in delayed writes (conceptually), otherwise when they post back to the server, and the page refreshes, they might be very confused as to why the content doesn't reflect the recent addition! :D

Collapse
 
vikramj74 profile image
Vikram Jaswal • Edited

Awesome post. I resonate with almost all of your suggestions. Apart from stream processing in kafka, I have been able to work with all the other mentioned technologies that you've mentioned. I am also an evangelist of developing a broad understanding of concepts. It helps the brain grow, according to me. Thanks for the post.

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Thanks!

Collapse
 
ibrahimwehbi profile image
Ibrahim Wehbi

Well I am new in the Web Development business and I'm trying to work my way by studying daily(concentrating on HTML HTML5, CSS CSS3, JavaScript, and PHP). However, I studied ASP.Net and C# at the university but it didn't serve me well.

At the moment, I am working my way to become a senior programmer as I have finish a maze game that shifts on particular places and you must study the terrain for hints to solve it, otherwise you'll get stuck with the shifting terrain!

And working on a Wedding Designer Website for my relatives.

I would be pleased if someone gave me links to some advanced Web Programmer Websites to help me further on in my studies and researches!

Thank you,
Ibrahim Wehbi

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

I wouldn't aim towards a senior just yet. To me, at least, senior indicates about 10 years experience of working on teams, mentoring juniors, putting out metaphorical fires and communicating with customers.

At this point you should look for a job. Most sites will teach you the basics.

Once you have some good skills under your belt - put them to use, either on a personal project or a commercial one.

Good luck!

Collapse
 
aladin002dz profile image
Mahfoudh Arous

isn't it said "specialize"? doesn't this make us "jack of all trades"?

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Nope. Specialisation vs generalisation is a bit of a debate in the software world. More here softskills.audio/2016/08/29/episod...

Currently, I'm on the generalise side (note, this list excludes things like game dev, embedded... so its not that general)

Collapse
 
aladin002dz profile image
Mahfoudh Arous • Edited

I've listened to the podcast, seems like there is no right answer for the the question, and it is slightly inclined to generalism...

Thread Thread
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Exactly :) Pick one.

Collapse
 
fzngagan profile image
fzngagan

I can relate to it but I would like to add some things I feel are essential...

Algorithms
Functional Programming(basic)

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Good suggestions! Thanks

Collapse
 
gaja6413 profile image
Gajapathy Raj

When I read the topic I was expecting git. But it wasn't there):

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Yup, someone mentioned that in the comments. Should be there, but I assumed obvious ;)

Collapse
 
wanderleyfa profile image
Wanderley

Can I translate this text into Portuguese?

Collapse
 
djiit profile image
Julien Tanay • Edited

Hi there !

May I suggest you replace Node.js with Express and PHP with Symfony ? Those are not Frameworks, the first one is a JS Runtime and the second one is a language :).

Cheers

Collapse
 
hackvan profile image
Diego Camacho

3 out of 9, the road is long.

Collapse
 
gautamkrishnar profile image
Gautam Krishna R

Awesome!

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

THANKS!

Collapse
 
jsalvador profile image
Juanjo Salvador

Totally agree with you!

Collapse
 
samjarman profile image
Sam Jarman 👨🏼‍💻

Yay! Thanks :) Means a lot.