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
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.
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)
* 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.
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.