Skip to content

List of Videos and Exercises for aspiring web developers

License

Notifications You must be signed in to change notification settings

hebrides/intern-training

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Zero to Hero - SMG Mobile's Web Application Developer Intern Training Guide

Update 2024:

0. LLMs, CNNs, RNNs, GANs, and AI

Development apps in the works take what users ask of them and create software. What's next for an aspiring developer? Learning to write good prompts? I'd argue, emphatically, no, because as much as A.I. impresses us, it can only ever learn from what humans have already created. I catch A.I. adding bugs as much as taking care of dreary boilerplate nearly every time I ask it to help me code something. If I didn't understand how code worked, how would I do this? How would a developer working on more than a hobby project catch malicious code inserted from a "bad" robot?

Should you still learn the nuts and bolts? Absolutely you should.

Watch the below videos, read the linked content, and complete the exercises to start your journey to becoming an amazing web developer.

Note, you will not find complex algorithmic puzzles or tricky math problems here. Great developers are craftspersons who enjoy making things. Try to watch these in order, so you can build up upon basics. Think about the general problem being solved first—the purpose of the particular tool, technique, or process—before getting into details. Strive to attain the 30,000 foot view before you dive deep.

After you're familiar with the industry tools and standards, and how to solve problems on your own, take time to learn about the buzzwords in A.I. and what they mean.

Take some more time to learn linear algebra; these models are, at heart, "just" multi-variable (this is the same as high-dimensional) math formulas with some iteration thrown in.

Over the next ten years, A.I. will likely learn to mimic what we do well, that is, with fewer and fewer errors. But then might come big changes. We may be able to start asking our A.I. to improve technology at a fundamental level. Imagine existing paradigms undergoing significant improvements, for everything from the hierarchy of signaling protocols and the common software patterns presented in the videos below, to the physical engineering itself of our tools and the materials we use to make them. Perhaps A.I. will explain that the best computer we could hope to devise is already there, between our ears. Perhaps A.I. will "wake up", and help us understand how the wetware of our nervous system, as it processes vast inputs of information from our senses, manifests the mentality of red, the smell of mint, our fears and joys, those mysteries that give meaning and substance to life. The potential of A.I. makes learning how it works valuable.

A. Command Line / Bash

You must master the command line to become a proficient contributor to a software team.

  1. https://youtu.be/cQ81k1vXvcU
  2. https://www.udemy.com/course/linux-shell-scripting-free/
  3. https://youtu.be/lZAoFs75_cs
  4. https://youtu.be/wBp0Rb-ZJak
  5. https://youtu.be/oyc_6UfoW3w
  6. https://youtu.be/pIL5LZQn3W8
  7. https://youtu.be/Vbu8rfVaABw
  8. https://youtu.be/AI6Ccfno6Pk
  9. https://linuxhandbook.com/bash-arguments/
  10. https://youtu.be/utk8yEpyy7A
  11. https://youtu.be/ugA8OxaCoo8
  12. https://youtu.be/E2h2ECEiTo4
  13. https://youtu.be/vDOVEDl2z84
  14. https://youtu.be/mA08E59-zo8
  15. https://learn-regex.com
  16. https://regexone.com/
  17. https://regexcrossword.com

B. TCP - FTP - HTTP - Client - Server API - CRUD - DB

Client-Server Model

You must understand the client-server model of web application design.

  1. https://www.omnisci.com/technical-glossary/client-server
  2. https://youtu.be/pGGDdKZvYpI
  3. https://support.microsoft.com/en-us/office/database-design-basics-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5
  4. https://www.vertabelo.com/blog/a-database-model-for-action-games/
  5. https://www.essentialsql.com/database-normalization/
  6. https://learn.microsoft.com/en-us/office/troubleshoot/access/database-normalization-description
  7. https://www.javaguicodexample.com/normalizationnotes.pdf
  8. https://www.mongodb.com/nosql-explained/data-modeling
  9. https://www.slideshare.net/mongodb/schema-design-by-example
  10. https://youtu.be/Hf0rjtnwC9A

Protocols

You must understand how network protocols work to encode information for routing requests from clients to servers, and responses from servers to clients.

README: Data flows in digital communications as small, managable packets of binary data, much like railroad cars on a choo-choo-train. Such train-car-packets have "header" carts at the front, strings of ones and zeros expressing the protocol, type of data, and information about the sender and receiver. Next comes the primary data package, or "payload" cart, in the middle of the packet. Trailing zeros make up the caboose, or "footer" are at the end of the packet to signal termination. Information transmitted in this manner provides the internet its vaunted resiliency. Routing and assembling packets is the core task of networking software and hardware.

  1. https://youtu.be/1Vq1lrWQAyg
  2. https://youtu.be/v8aYhOxZuNg
  3. https://youtu.be/Ilk7UXzV_Qc
  4. https://youtu.be/QrNnRJqTMO8
  5. https://youtu.be/MVihcigDlbA
  6. https://youtu.be/nomyRJehhnM
  7. https://youtu.be/6sUbt-Qp6Pg
  8. https://youtu.be/7YcW25PHnAA
  9. https://youtu.be/c9gqtjMaFHA
  10. https://youtu.be/GrNrcmD6HLA
  11. https://youtu.be/wJa5CTIFj7U
  12. https://youtu.be/cA9ZJdqzOoU
  13. https://youtu.be/yBB2VKG1_X4
  14. https://youtu.be/8ARodQ4Wlf4

You should understand the concepts Virtual Private Network (VPN), TOR / onion routing, and have a basic grasp of various network topologies.

C. Key Security & Hashing

You must understand the basic security strategies used for encrypting data for network communications.

  1. https://youtu.be/cczlpiiu42M
  2. https://youtu.be/GSIDS_lvRv4
  3. https://youtu.be/84sO-0JxoHU
  4. https://youtu.be/KyUTuwz_b7Q
  5. https://youtu.be/vKpqYSyRZck
  6. https://youtu.be/0TLDTodL7Lc
  7. https://youtu.be/E_wX40fQwEA
  8. https://www.youtube.com/watch?v=86cQJ0MMses
  9. http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html

D. Web Programming / Env / App Structures / Laravel / NodeJS / Testing

You must become proficient, over time, with an array of skills to be able to build and deploy client-server software.

  1. https://medium.com/swlh/my-software-engineer-roadmap-2fb0c02b8a08
  2. https://github.com/kamranahmedse/developer-roadmap
  3. https://thevalleyofcode.com/

Programming fundamentals

You must master programming fundamentals to be able to efficiently implement ideas in code. You must understand how to construct applications using established software design patterns and common software development tools including Interactive Development Environments(IDEs), Version Control Systems(VCSs), and formatting and debugging tools.

  1. https://youtu.be/quW5dAGpXiU
  2. https://youtu.be/Us4LwTjWFaY
  3. https://youtu.be/7oS1i-IWp1Q
  4. https://youtu.be/azcrPFhaY9k
  5. https://www.youtube.com/c/cs50
  6. https://www.youtube.com/watch?v=9-cyC6O81Bk
  7. https://youtu.be/FKTxC9pl-WM

Software Design Patterns

You must grasp common professional software development design patterns.

  1. https://eakansh.hashnode.dev/design-patterns-for-software-design-and-development
  2. https://youtu.be/hQE8lQk9ikE
  3. https://youtu.be/IRxOTkFduT8
  4. https://youtu.be/a5JWrd7Y_14
  5. http://aroma.vn/web/wp-content/uploads/2016/11/code-complete-2nd-edition-v413hav.pdf

IDEs, Version Control Systems, & Debugging Tools

You must understand how to use IDEs, VCSs, and Debugging Tools.

  1. https://www.codecademy.com/articles/what-is-an-ide
  2. https://youtu.be/W2V-TjHV5SM
  3. https://youtu.be/UZMmpav62rY
  4. https://youtu.be/USjZcfj8yxE
  5. https://youtu.be/RGOj5yH7evk
  6. https://youtu.be/ilZnwY-gYcI
  7. https://youtu.be/ZtHqwzslcYA
  8. https://youtu.be/llx5djJmXXw
  9. https://youtu.be/AnTX2mtOl9Q
  10. https://semver.org
  11. https://www.freshconsulting.com/insights/blog/atomic-commits/
  12. https://youtu.be/Uszj_k0DGsg
  13. https://mokkapps.de/blog/how-to-automatically-generate-a-helpful-changelog-from-your-git-commit-messages/
  14. https://opendev.org

Linting

You must understand how to use automated code checking and styling (a.k.a. linting) tools.

  1. https://stackoverflow.com/questions/8503559/what-is-linting#8503586
  2. https://youtu.be/St1YSNoB36Y
  3. https://github.com/airbnb/javascript

Part 1. Web Client Software

You must understand HTML, CSS, & JavaScript.

README: Web browsers interpret three frontend languages to display and manipulate client application data, HTML, CSS, and JavaScript. HTML describes the client's layout structure and meta-data (used by search engines). CSS styles and animates HTML elements. JavaScript creates complex interactivity by manipulating HTML & CSS and accessing special browser APIs. A web developer can do many cool things on the client with HTML, CSS, & JavaScript. Strive to improve your proficiency in all three.

  1. https://www.freecodecamp.org/news/a-practical-guide-to-learning-front-end-development-for-beginners-da6516505e41/
  2. https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML
  3. https://www.w3schools.com/html/default.asp
  4. https://www.w3schools.com/js/default.asp
  5. https://www.w3schools.com/css/default.asp

README: Technically, the client part of a web app can be written in HTML, without CSS, or JavaScript; however, doing so severely constrains the application's user experience. Try this out to help yourself only if you're having trouble grasping fundamentals.

README: You need to understand the concept of code frameworks. Frameworks, in general, are software tools developers use to reduce development time. Frameworks simplify code structures and separate concerns, making teamwork easier and improving source maintainability.

README: Professional web developers usually master at least one web client framework. You should make this your goal, too.

README: Some popular frontend (client) frameworks include React / NextJS, Vue / Nuxt, Svelte / SvelteKit, Remix, and Angular. The unique syntax of a web client framework, no matter how idiosyncratic, always compiles to HTML, CSS and JavaScript.

  1. https://www.youtube.com/watch?v=cuHDQhDhvPE

README: TypeScript is a popular JavaScript-superset designed to make it easier to compose and debug JavaScript. TypeScript compiles to regular JavaScript for running on the browser, your local PC, or a web server. TypeScript can be auto-formatted ("linted"), like most programming languages.

README: Sass is a CSS-compatible language designed to make it easier to write and maintain CSS styling code. Sass compiles to browser-readable CSS.

README: Some programs, including Cordova (commercially implemented as Capacitor & Ionic) and Electron, allow developers to bundle web applications as native apps that can run outside of the browser. A hidden, mini-browser is deployed to contain the app. VSCode is a popular "web app" built using Electron. The advantage of Cordova and Electron is they allow developers to deploy one code base to multiple platforms, reducing development and maintenance costs.

README: Other languages that are used to make client apps include React-Native, Dart/Flutter, Swift, Objective C, Java, C, C++, C#, GDScript, Lua, Unity / C#, Rust, and others. These languages compile code to native binary or byte-code executables for running on a desktop or mobile device; React-Native, Flutter, GoDot, and Unity can also compile code so it runs in a web browser.

What is the advantage of using a web browser as a client?

  1. https://www.knowledgeonecorp.com/blog/post/2012/06/17/Why-is-the-Web-Client-a-much-better-solution-for-applications.aspx

Part 2. Web Server Software

You must understand how to use at least one server-side language.

README: Developers use multiple backend languages to handle server-side operations (e.g., updating a database, performing an API service, serving whole or part of the web client, or responding to client requests with data or error messages). These backend languages include, but are not limited to, PHP, JavaScript (known as "NodeJS" on the backend), C#, Python, C, C++, Rust, Java, Erlang, Bash, and others:

  1. https://www.statista.com/statistics/793628/worldwide-developer-survey-most-used-languages/

README: Some web development frameworks handle the full stack, that is, both web client and server, with one primary "language", e.g., Meteor (JS), .Net (C#) and Laravel (PHP). Full stack frameworks abstract away common client-server application tasks using opinionated syntaxes, APIs and structures, that, while imposing a new learning curve on the developer, once learned, make development more efficient; some full stack frameworks allow developers to interchange the "frontend" portion of the framework, like the ones listed under Web Client Software above, so the developer can use a preferred tool for delivering the HTML, CSS, & Javascript client pages.

README: Some frameworks work better than others in certain situations due to a number of factors, including web application architecture, business requirements, team size, developer skill-level, and team preferences:

  1. https://www.scnsoft.com/blog/web-application-architecture
  2. https://hackernoon.com/how-to-choose-a-web-application-framework
  3. https://floverfelt.org/posts/software-best-practices.html

README: Software developers, no matter what language they're using, take advantage of libraries of pre-built code (often available as FOSS) to speed things up. Web developers use special libraries for JavaScript programs known as "packages". Packages can be downloaded from one of two popular package repositories, npm and yarn (using the eponymous command line tools, npm install and yarn install).

Note 1: Developers also add pre-built JavaScript libraries directly using special HTML links (script tags) and JavaScript includes (modules).

Note 2: Developers also use bundlers, like Webpack / Parcel / Snowpack, to minify and combine web application code so it can be delivered to browsers more efficiently.

README: No developer can master every language, framework, library or tool. Familiarize yourself with what you need to reach your goals. Start simple, move to complex.

Part 3. Web Software Tests

You should know what software tests do. Many professional production environments require developers to write "unit tests" as a foundation of Quality Assurance. Besides unit tests, there are also "integration" and "functional" tests.:

  1. https://www.tutorialspoint.com/agile_testing/agile_testing_quadrants.htm
  2. https://youtu.be/Eu35xM76kKY
  3. https://stackoverflow.com/questions/398004/do-you-write-your-unit-tests-before-or-after-coding-a-piece-of-functionality
  4. https://www.youtube.com/watch?v=VS6EEUVZGLE
  5. https://www.youtube.com/watch?v=ydddSkVz_a8
  6. https://en.m.wikipedia.org/wiki/Behavior-driven_development

README: When developing client / server software you will build and run both the client and server on your local machine. When testing, you will test your work locally and on a remote development server. Prior to release, you and your colleagues will conduct user-acceptance, security, and stress testing with remote servers and remote clients.

Part 4. Requests and Responses

You must understand the request / response cycle in client-server applications. You must understand how to:

  1. Send a request to a server from a client
  2. Proxy (forward) requests using a webserver program like Apache or Nginx, from the HTTP port to a process port or program executable
  3. Action client requests to a server using a server script listening on a port
  4. Action client requests to a server using a server script to communicate to a hosted or remote database
  5. Action client requests to a server using a server script to communicate to a 3rd party API, microservice, or Lambda compute service
  6. Action client requests to a server using a server script and output from a native application executable or shell script
  7. Store data uploaded from the client to the server on the server's file system, in a database, or via a 3rd party service (like AWS S3)
  8. Generate a proper response, with data payload and appropriate headers, to the client
  9. Use the term API to refer to a library, function, script, or remote app that accepts requests (inputs), and sends responses (outputs): https://free-apis.github.io/#/
  10. Use a CDN: https://www.cloudflare.com/learning/cdn/what-is-a-cdn/

Read:

  1. https://en.wikipedia.org/wiki/Common_Gateway_Interface
  2. http://stackoverflow.com/questions/152457/ddg#152863

Part 5. Tech Stacks

You should know what a "technology stack" means. A client-server app's tech stack refers to the set of commercial and free tools used to build, deploy, and host the app. Junior developers often struggle to decide what tech stack tools to use. It's best to learn tools suited to complete one critical part of the project at a time, in order from simple to complex (e.g., web client, server app, database, 3rd party API integrations, CI/CD pipelines / staging, QA / testing). You will avoid becoming paralyzed by choice when you understand that web application development can be as complex as you decide it has to be. You can make a web app with a few lines of PHP. You can also build out a complex automated deployment system with thousands of lines of code, using multiple languages and a diverse array of supporting software tools that in toto work like a factory to update and release your app.

Tech stack advice: Learn a stack that has deep roots and support from a big vendor as a safe bet, then engage with newer tools and stacks from open source communities, academia, and emerging tech providers, to broaden your skills.

Still struggling with stacks? Ask yourself, what is the motivation for this tool? What specific problem does it solve? Understand the problem first before you start learning solutions.

  1. https://stackshare.io/stacks
  2. https://youtu.be/Sxxw3qtb3_g
  3. https://youtu.be/Qa0Mn5WgVdk

Part 6. Video Training Links

Watch these videos and complete the exercises within.

  1. https://youtu.be/gNmrGZSGK1k
  2. https://youtu.be/bf8L9tQi_MQ
  3. https://youtu.be/vrj9AohVhPA
  4. https://youtu.be/APM1mcKbK7o
  5. https://youtu.be/Dorf8i6lCuk
  6. https://youtu.be/GU-2T7k9NfI
  7. https://youtu.be/BcuktRvUe0Q
  8. https://youtu.be/txGL-Ld9zD8
  9. https://youtu.be/NMTEfaPEYB8
  10. https://youtu.be/UU7MgYIbtAk
  11. https://youtu.be/ytsWZlpyoSU
  12. https://youtu.be/eCZhz0JCVx0
  13. https://youtu.be/NmwtF0fAUfI
  14. https://youtu.be/5IG4UmULyoA
  15. https://blog.warrant.dev/implementing-role-based-access-control
  16. https://www.npmjs.com/package/i18next
  17. https://web.dev/accessibility-auditing-react/

E. DNS

You show know about A Records, MX Records, and other Domain Name System (DNS) records. You should understand how the internet associates human-readable names with machine-readable IP addresses. You should understand how DNS servers and DNS applications work in concert with other key server-based applications to provide internet services.

  1. https://youtu.be/uOfonONtIuk
  2. https://youtu.be/dE4rsNuG0aw
  3. https://youtu.be/By7N3nuQc7w
  4. https://www.youtube.com/watch?v=NijONS9gMZ0
  5. https://www.nslookup.io/learning/dns-record-types/
  6. https://youtu.be/m1mhaC5NH7s
  7. https://www.joshmcguigan.com/blog/run-your-own-dns-servers/

Cloudflare provides valuable DNS services free for web application developers:

  1. https://www.cloudflare.com/learning/dns/what-is-dns/
  2. https://www.cloudflare.com/dns/

F. DevOps

By now, if you haven't already, you should learn the concept of virtualization, and know the use cases for different types of virtualization, e.g., how Virtual Private Servers (VPSs) power the internet, how software like DevOps tools, IoT software, operating systems, and even game emulators utilize virtualization layers to function.

You should become proficient in DevOps.

README: DevOps in practice means utilizing two main skills to automate tasks:

  1. Writing scripts to set up virtual machines (VMs) with the operating systems, databases and programs you want pre-installed and configured. These scripts can also set up services that help you scale your application, so it can manage many thousands, or even millions, of users.
  2. Writing scripts to automate CICD (Continuous Integration / Deployment): This is automating the hosting of new versions of your app / game / tool via scripts that talk to your Github (or self-hosted) repo and your servers.

README: You find the scripts and programs you want for DevOps "orchestration" hosted online at different “hubs”, e.g.:

  1. Ansible (set up programs on existing servers): https://galaxy.ansible.com/search?deprecated=false&keywords=penetration%20&order_by=-relevance&page=1
  2. Vagrant (set up preconfigured servers / VMs): https://app.vagrantup.com/boxes/search?utf8=✓&sort=downloads&provider=&q=kali
  3. Docker (set up “containers“ a.k.a. "microservices" - OSs and programs running inside their own little VM-like processes): https://hub.docker.com/search?q=kali&type=image ; https://kubernetes.io/docs/concepts/containers/
  4. Kubernetes (set up a "cluster" of containers grouped into "pods" across multiple "nodes" - VPSs (VMs) or bare metal machines — so that the application components hosted in the containers (DBs, MQs, clients, servers, monitoring tools, networking tools, etc.) scale and change automatically in response to network demand and application state): https://helm.sh

README: DevOps is also called Infrastructure as Code (IaC). Like most standardization processes, DevOps reduces the fragility of systems by improving the reproducability and maintainablity of component parts. Client-server infrastructure scripts, for example, describe and deploy not only your app builds, but also infrastructure dependencies, including, but not limited to, hosts (VMs where your code runs), operating systems (programs that manage VM resources), web servers (programs to help forward requests to your software), load balancers (programs to help manage request-response traffic), message queues (programs to help manage sending messages like email password resets and in-app notifications to your clients), caches, search indexes, databases, block storage tools, logging tools, monitoring tools, and more.

From the ground up: Vagrant and Ansible (or Terraform, or other competitor) let you write scripts / manifests / serialization configs that can create, provision and update your VM servers, where your application runs in containers composed with Docker (or Containerd, or other competitor), which are coordinated and managed in a cluster by Kubernetes (using a Kubernetes management program like Keel).

There are many programs on the market that help tie together and manage DevOps infrastructures with GUI systems and YAML-inspired scripts. Learn what meets your needs. E.g., after you finish your first simple client-server-database app, write a docker-compose script that builds the app's infrastructure in steps as separate containers linked and hosted on your local machine. Then use K3s to simulate locally how your app will be orchestrated and managed on a "cloud" host, and view your handiwork in a GUI-supported container management system like Portainer or Rancher.

You may be thinking this is quite a lot of ceremony for a web app! Do you really need to master advanced DevOps pipelining and orchestration tools to become an amazing web developer?

No, you don't.

How deep you want to go into DevOps depends on where you may work, or what you may want to do as an individual developer. You should learn the problems DevOps tools solve first, then decide if you need those solutions now, or if you're happier to acquire DevOps implementation details for your use cases as they become necessary to know. In the meantime, you can and should take advantage of services that solve common DevOps problems for you, like Netlify, Laravel Vapor, Meteor Cloud, Azure, Vercel and Amplify.

What problems, after all, does a multinode manager like Kubernetes (or Titus) actually solve?

Well, big ones, mostly. If you're building a web service that requires hundreds of nodes to support millions of customers, you may need to learn a tool like Kubernetes and a cloud management system like OpenStack. If you want to make an AI tool that must run on thousands of nodes to crunch petabytes of data with precision and thrift as demand scales, you will need to master DevOps software and scripting.

A media streaming service like Netflix, e.g., must utilize DevOps tools, because of the amount of data and bandwidth the service provides: Millions of users watch 4K videos on demand using Netflix. Video and music streaming companies like Netflix, Disney+, HBO Max, Spotify, Pandora, etc. can ill-afford downtime and will always need skilled DevOps engineers.

Scale determines needs. A simple web app will do just fine on a single node VPS host; but bigger problems require more complex solutions.

DevOps Videos & Links

  1. https://12factor.net
  2. https://youtu.be/yIVXjl4SwVo
  3. https://youtu.be/wX75Z-4MEoM
  4. https://youtu.be/KxxRl6VEBxI
  5. https://youtu.be/POPP2WTJ8es
  6. https://www.youtube.com/watch?v=jyW3D74I3_w
  7. https://devopscube.com/become-devops-engineer/
  8. https://youtu.be/OXE2a8dqIAI
  9. https://www.youtube.com/watch?v=j5Zsa_eOXeY
  10. https://www.youtube.com/watch?v=hQcFE0RD0cQ
  11. https://youtu.be/PwSZpcl7vUE
  12. https://youtu.be/xhva6DeKqVU
  13. https://youtu.be/DZRG2sezIl4
  14. https://digital.ai/periodic-table-of-devops-tools
  15. https://youtu.be/UmdVsXr5eak
  16. https://youtu.be/oq1fOr6Ryws
  17. https://youtu.be/7MLXuG83Fsw
  18. https://youtu.be/J-xqz_ZM9Wg
  19. https://www.sentinelone.com/blog/function-as-a-service-faas/
  20. https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html
  21. https://kubernetes.io/case-studies/
  22. https://www.varonis.com/blog/docker-vs-kubernetes
  23. https://www.linkedin.com/pulse/learn-yaml-devops-easy-way-sandip-das/
  24. https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton
  25. https://www.appvia.io/blog/tutorial-deploy-kubernetes-cluster
  26. https://youtu.be/_gWfFEuert8
  27. https://docs.openstack.org/openstack-ansible/newton/developer-docs/quickstart-aio.html
  28. https://erik-ekberg.medium.com/how-to-test-aws-lambda-locally-6f07bd36abd9
  29. https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-performance-testing-visual-studio-profiler
  30. https://www.youtube.com/playlist?list=PLkWRCY_kK0GgrU0L2nnRtzef8HPVsJp0r (optional)
  31. HAProxy / Traefik
  32. "Edge" Computing

G. DevSecOps

You should understand the purpose of automating security tools to test your software against exploits and hacks.

README: For development security ops, e.g., you will use DevOps tools to spin up and test an application’s full server structure (all the VMs, services and containers) on your home PC (a machine with 32-64GB ram would be ideal for this, min. 16GB ram).

  1. https://geekflare.com/port-scanner-server/
  2. https://youtu.be/ng1bvXsp9ZA
  3. https://youtu.be/7UG8wE58vU8
  4. https://cybersguards.com/list-of-hacking-tools/
  5. https://www.offensive-security.com/metasploit-unleashed/
  6. https://software.af.mil/wp-content/uploads/2021/05/DoD-Enterprise-DevSecOps-2.0-Fundamentals.pdf

DevSecOps with Github Built In Tools:

  1. https://youtu.be/hln5v7odguE
  2. https://youtu.be/oXRdejqwBwc
  3. https://youtu.be/by25ZKJ6ENU

Security Checks

  1. https://sysdig.com/blog/container-security-best-practices/

H. Nix Systems

By now you will have set up and run a few different Linux VMs on your PC or Mac dev machine. Here's another one to try:

  1. https://pop.system76.com

I. Decentralization

Over two decades ago, in the late 90s, distributed technology and torrent protocols made large-file media sharing inexpensive, fast and easy for users over peer-to-peer networks. The rise and consolidation of big-tech services in the 00s brought back the heavyweight client-server paradigm. However, the emergence of inexpensive local storage, 5G tech and blockchain, could re-value nimble products that leverage mesh, ad-hoc, and peer-to-peer networks. We may realize the "democratization" of communication and trade foreshadowed by technologies of the past. You should understand how the concept of decentralization influences contemporary software development.

  1. https://youtu.be/7VbL89mKK3M
  2. https://youtu.be/LFZDpF_A-BE
  3. https://www.section.io/engineering-education/how-to-create-a-blockchain-in-python/
  4. https://youtu.be/i9e4g7SV244
  5. https://moxie.org/2022/01/07/web3-first-impressions.html

J. Design

You must have basic user interface design skills, and understand what interfaces work best for a given set of user input requirements.

  1. https://www.w3schools.com/html/html_form_input_types.asp
  2. https://www.w3schools.com/html/html_blocks.asp
  3. https://www.justinmind.com/blog/navigation-design-almost-everything-you-need-to-know/
  4. Manufacturer standards: https://developer.apple.com/design/human-interface-guidelines/
  5. Dashboards: https://pixinvent.com/demo/vuexy-vuejs-laravel-admin-template/demo-1/dashboard/ecommerce
  6. Design innovation: https://www.awwwards.com
  7. Design inspiration: https://tympanus.net/codrops/

K. Prototyping

You must understand the importance of prototyping.

Just as it's wise to plan, sketch, design, and finalize an architectural drawing before building a physical structure, so it is also smart to undertake preliminary steps before coding a software application. The build phase of software development, as with construction, is time, money, and labor intensive, and consequential. Whereas a sketch, detailed design, or mock up can be done and redone in minutes to hours, coding can take days and also requires debugging, versioning, testing, staging, deployment, QA, and maintenance after completion.

There are many tools and design systems to help designers and developers create interactive mockups prior to commiting the work to code, or avoid coding altogether. Developers are encouraged to learn a few of these to save time and money.

Also stongly consider using a no code / low code platform or form builder to rapidly prototype a working application before coding. This will help you discover and fix UI hiccups early on.

You may, in fact, find a platform or builder that delivers an acceptable solution to the problem you were going to solve with a time-consuming, custom application, with little to no coding at all, freeing you and your business to expend efforts on other valuable pursuits.

L. Teamwork

You will be more employable at traditionally structured corporations and better prepared to contribute to OSS projects if you are comfortable working with other developers and other teams of developers. You should familiarize yourself with "agile" software development processes and learn to communicate via Github and Gitlab issues. Experiment on a group project with friends, or consider taking on a Github or Gitlab issue on an OSS project.

  1. https://youtu.be/5RocT_OdQcA
  2. https://youtu.be/nI5VdsVl0FM
  3. https://www.codingzeal.com/post/agile-is-the-worst
  4. https://github.com/collections/choosing-projects
  5. https://pragprog.com/tips/
  6. https://www.scrum.org