Ask HN: Necessary Skills for a Junior Dev

12 points by imperistan ↗ HN
Hello HN, Long time lurker here. I'm an online marketeer. For a while now I'm a hobbyist PHP dev. I enjoy it a lot, but obviously my experience is limited. I've created some small projects in object oriented PHP.

Anyway, i'm thinking about trying to get a job as a junior PHP dev. What skills do you think are necesarry to succeed? It's probably a bit hard to put in text - I mean, how do you quantify the skill level you need? Still i'm very curious what you think.

By the way, I've always coded solo. So no experience in working in a team of devs. Also, i've never worked on a project that I didn't start myself. So no experience in working in an existing code base. Do you think that's a problem?

Thanks! Imperistan

19 comments

[ 3.0 ms ] story [ 53.0 ms ] thread
Just get a job if you can. The biggest asset for job hunting is experience. No amount of preparation can change that. good luck.
Two biggest skills - asking good questions and listening to answers/directions.
Also googling questions, troubleshooting skills in general goes far whatever environment anyone is put into
Googling is how I learned all the programming skills I have :)
Hi. Here's a reply[0] to someone wanting to get a foot in the door as a Python developer from two weeks ago. That reply also contains link, especially the "index reply"[1] which itself contains links to useful posts on how to learn a codebase, how to be useful to the team, product development, etc.

- [0]: https://news.ycombinator.com/item?id=25663423

- [1]: https://news.ycombinator.com/item?id=25367011

Awesome, that's a lot of info. Thanks!
You're welcome, and all the best.
I’m a senior developer and I’ve trained a few junior developers over the years. Here’s the technologies/skills you will likely be expected to know in 2021:

Backend:

1. PHP 8, Composer, with some framework such as Laravel.

2. SQL with some relational DB such as MySQL.

3. Unix shell scripting (Bash).

4. Docker and Linux familiarity.

5. General knowledge of AWS services.

6. Either Apache or Ngnix.

7. JSON, XML, YAML.

8. Some PHP unit testing framework.

9. Git

Frontend:

1. ECMAScript 7 and probably Typescript.

2. Vanilla JS/DOM API.

3. Node.js and a toolchain like Webpack.

4. CSS3 and HTML5 and probably SCSS.

5. React and friends.

6. JQuery and friends.

7. Framework such as Bootstrap (but there many others).

8. Unit testing framework such as Cypress.

Networking:

1. HTTPS 3 (RESTful).

2. TCP/IP.

3. DNS.

4. SMTP.

5. FTP.

6. SSH.

A general knowledge of the field of networking will help but you don’t have to be an expert, just take a networking course on Udemy.

Security:

1. SSL certificates.

2. OAuth.

3. OpenSSL and RSA key generation.

4. Linux hardening such as firewall configuration.

5. JWT.

A general knowledge of things like hashing and salting passwords, encrypting cookies and not storing API keys in the codebase, and a knowledge of common hacks in the field is expected.

If you don’t have any experience then build some small service and do a few github projects. Personally I would limit your job search to Craigslist since employers have lower standards there.

One trick that got my foot in the door was I took a data entry job and after a month or two I automated my job away (which only took a weekend to do) and listed that job as a software role.

I think to know all of that is a bit of a stretch. This same exact list could be used for a mid or a senior level.

As a junior I would expect you to be roughly aware of some of those topics. Certainly knowing AWS, SSL, JWT, firewalls, FTP, SMTP, HTTPS3 are not necessary for a junior role.

For juniors I am much more interested in seeing how eager they're to learn, what they've built and what excites them. In fact, I've hired people who didn't knew python, linux or git working as a backend developer in a python/linux/git shop and it worked pretty well.

(He was a Windows DBA interested in moving to programming)

It’s a ridiculous but earnest list. I guess it depends on the company, but these days many if not most companies expect junior developers to have senior level knowledge and pay them junior level salaries. Having said that, I didn’t know JQuery when I got hired and learned it a week or two. So yes, the most important quality is you can learn quick on the job.
Do you think that list might be too long, as "expected to know"? Feels like "No true Scotsman".
I guess HN is taking what I listed that way, ha. I really just meant that things have changed since the old days. This list is just an outline, certainly not all of the skills are required.
Damn, I guess I'm not even a junior dev then lol.
I know, really. Many of these bullet points even I learned after becoming a junior developer. I was just reflecting on my experience training junior developers this past year and assuming we’re talking about fullstack PHP devs, most if not all of these items were skills (to lesser or greater extent) were required to be proficient at my workplace. I wish it wasn’t this way but can’t you agree that compared to 2010 that becoming a junior dev has become harder.
In general, learning to learn and be patient with the process. Based on your specific context, I’d also recommend reading code, a lot of it. There’s definitely a difference between designing and writing software in isolation and jumping into a new code base. Learn about what it is supposed to do and why, then spend a lot of time reading the code to learn the how. Also, beware of being overly critical without the history and context behind things—but, learn from the mistakes made previously and raise the quality bar by example.
* Writing. Be able to communicate and document.

* Data Structures. An understanding of how to package and access data in your code is more important than any junior can possibly understand.

* Standards. Learn the foundational rules that define your technology. Shitty people will tell you this isn’t important, so keep that in mind.

* Stupidity Avoidance. Solve hard problems first. Observe your peers who can’t solve hard problems.

Thanks! Any idea where I can learn more about data structures? I feel like I'm lacking there.
Data structures are largely universal concepts, but how you access and organize data structures differs by language. There are a lot of good books about reasoning data in an abstract way.

I am a JavaScript developer and here is an overview of what I know from writing in this language:

* objects (hash maps) are a list of key value pair. The keys are always strings and the values are of any data types. Keys must be unique. Just like hash maps in C, C++, Java, and other C-like languages keys are accessed randomly from memory until the requested key is retrieved. Knowing this opens the potential for low level performance hacks. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guid...

* arrays are a list. Unlike most strongly typed languages arrays in JavaScript are not bound to a fixed length or data type. Arrays of a single data type do execute much faster though due to improvements in the JIT compilers. A requested array index is retrieved from memory in index order, which is typically faster than accessing an object property by name, but not always. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

* Maps are a key/value pair similar to objects except the key does not have to be a string data type. The key name could be another object. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

* Sets are a list of values where each value is unique according to its data type and actual value. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

* Weak Map - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

* Weak Set - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

---

The biggest problem I have seen through my career with people's approach to data structures is to treat the data as a value set, like something retrieved from a database query, instead of a structure like a program class or function. That distinction is huge and will change how you perceive programming. The difference is that you will see a structure is an abstract set of relations to walk where a data value is something to blindly throw code at until you get the answer you want.

For example file systems are data structures. You can blindly search a file system for something, but that is lazy and slow. Instead if you have a general idea of what you are looking for you can walk there with a bit more effort in a fraction of the time.

JSON is a common data reference scheme based upon JavaScript's objects and arrays.