I would check out this website http://www.techladder.io/. It was recently made on https://dev.to/ for Hacktoberfest and walks you through from 5% to expert. It's on GitHub, and while only 3 topics...
I would check out this website http://www.techladder.io/. It was recently made on https://dev.to/ for Hacktoberfest and walks you through from 5% to expert. It's on GitHub, and while only 3 topics are public on the site 16 are WIP on github
Is there any easy place to track the WIP ones? For example say I wanted to contribute to the Java one, where could I find it besides manually going through all the forks?
Is there any easy place to track the WIP ones? For example say I wanted to contribute to the Java one, where could I find it besides manually going through all the forks?
If I am reading this question right, this would probably be better asked in ~tech or actually even ~comp, given the highly technical nature of the fields that you're asking about... especially...
If I am reading this question right, this would probably be better asked in ~tech or actually even ~comp, given the highly technical nature of the fields that you're asking about... especially since I imagine a decent amount of people who are subbed to those groups and can answer this question may have unsubbed from ~talk because of its casual nature. If you want me to I can move it there for you, @Wolf. So just let me know. :)
Yeah, it's a pretty interesting but probably quite tough to answer question, IMO... and I certainly don't feel nearly qualified enough to even try. Hopefully someone else who sees this does though. :)
Yeah, it's a pretty interesting but probably quite tough to answer question, IMO... and I certainly don't feel nearly qualified enough to even try. Hopefully someone else who sees this does though. :)
This is an incredibly abstract concept to try to quantify. I don't think you're going to find anything more than perhaps some literature touching upon the subject without an actual scientific...
This is an incredibly abstract concept to try to quantify. I don't think you're going to find anything more than perhaps some literature touching upon the subject without an actual scientific backing. If you want some food for thought, however, here's a paper written in 1980 on the subject of a model for skill acquisition. This could be a good starting place for your research into the subject at large :)
Edit: Here is a much better version, which goes into greater detail and isn't so obviously from 1980.
Ah, gotcha. In that case, you're going to have an even more difficult time finding a solid answer. If we go the syllabus route, the only thing you're actually going to get is a measure of a base...
Ah, gotcha. In that case, you're going to have an even more difficult time finding a solid answer. If we go the syllabus route, the only thing you're actually going to get is a measure of a base level of competence with the fundamentals. There are far too many things that you simply won't learn by checking another box on a list of things to learn, unless your goal is to become an expert with a set of very specific technologies. Ultimately general expertise in an area of tech (and really any field, for that matter) is something that comes with first-hand experience and lots of practice.
If you want a checklist of basics, then great, we can get started with a pretty good list pretty easily. But there's just no way to become an expert without breaking away from that list.
Alright, here's a quick syllabus for programming: Intro Variables: Assignment, accessing values, swapping values between two variables. Data types: Overview of the general concept of different...
Exemplary
Alright, here's a quick syllabus for programming:
Intro
Variables: Assignment, accessing values, swapping values between two variables.
Data types: Overview of the general concept of different types of data.
Numbers: Arithmetic operations, difference between int and float.
Conditionals: If/else statements and logical operators (AND, OR, NOT, etc.).
Algorithms: Basic sorting, searching, counting, accumulation, other simple and common tasks.
Common errors: Infinite loops, exceeding array boundaries, comparing strings (lexicographical order, string stored as an object, etc.), logical vs. bitwise operators (e.g. using & instead of &&).
Basics
Recursion: Base and recursive cases, concept of the call stack, simple algorithms like recursive Fibonacci.
Binary: Basics of binary representation, bitwise operations, simple conversion of integers to binary and vice versa.
Intermediate
Memory management: allocating and freeing, pointers vs. addresses, memory leaks.
Basic architecture: understanding CPU operations and assembly, pipeline stalls, basics of optimization (e.g. loop unrolling), caching, registers, Moore's law, architectural hierarchy, relative speeds of storage mediums, etc.
Data types: Lower level representations, e.g. strings as pointers to multiple characters.
Binary: More advanced subjects e.g. bit shifting, IEEE representation, floating point representation, negative bit, etc.
Recursion: More advanced recursive algorithms e.g. depth-first and breadth-first searches, traversing general tree and graph structures.
Concurrency: Threads, synchronous vs. asynchronous, mutex locks, synchronous data structures, race conditions.
Compilers: Stages of program compilation, static vs. dynamic linking, optimization levels, etc.
Program state transitions.
Advanced
Operating systems: Software layers, task scheduling and different strategies, paging, thrashing, segmentation, processes, inter-process communication, process forking, interrupts, signals, deadlock, producer vs. consumer, semaphores, critical regions, address mapping, user vs. kernel mode, context switching, IO-bound vs. CPU-bound processing, etc.
Algorithms: More advanced subjects e.g. Dijkstra's algorithm, dynamic programming.
Data structures: Much more advanced structures e.g. auto-balancing tree structures.
Grammars: Differences between regular, context-free, and context-sensitive grammars (allows you to e.g. determine whether or not you can use a regular expression to find a pattern or if you need to utilize a stack structure and perform more complex parsing).
Networking: Basics of IP addressing, DNS, packet switching networks, protocols, request methods, ports, NAT.
Security: Basics of SSL/TLS, encryption, hashing, firewalls.
Most people are fine after the Intermediate section. That's enough to give you a pretty solid foundation and make you a fairly decent intro level programmer. The Advanced section, however, is highly recommended for anyone. Understanding how your operating system works in particular can help you unearth the root cause of a problem with some tool that's malfunctioning. Even the largely academic parts like auto-balancing tree data structures still help to provide valuable insights into different approaches and tools that are available for solving problems you may end up running into.
I've likely missed some pretty important topics here. I may have even miss-categorized some of them. I've kept subjects of purely academic value down to a minimum. I've tried to avoid domain-specific subjects as much as possible (e.g. nothing specific to web programming). More than anything, I highly doubt there will be universal agreement with this list overall. This is based largely on my own personal experiences as both an academic and as a professional and is thus subject to bias. Still, I feel that it gives a fairly powerful set of fundamental subjects that a programmer can make use of in a variety of situations and that the skills you develop learning these subjects are the most transferable between programming languages and problem spaces.
If anyone has any feedback on this list, I'll be sure to hear you out and make any changes where appropriate.
Nice resource! I really wish I'd had this when I first had to learn about SSL/TLS a couple years ago. Perhaps a bit more verbose than is needed for grasping the basic mechanics, but perfect for...
Nice resource! I really wish I'd had this when I first had to learn about SSL/TLS a couple years ago. Perhaps a bit more verbose than is needed for grasping the basic mechanics, but perfect for ironing out the details :)
Oh, absolutely. There's more than enough information for any given field in tech for gaining a base level of competence. Personally, I believe that meghan's resource works more for gaining that...
Oh, absolutely. There's more than enough information for any given field in tech for gaining a base level of competence.
Personally, I believe that meghan's resource works more for gaining that base level of competence for a specific programming technology (and right now there are only a few languages listed). If you want a general syllabus for gaining competence in programming specifically beyond simply competence in a given language, I'll look into writing something up when I have a little more time :)
You could look at curriculum's duration, and add a few years of experience on top of that. For example for machine learning you need a master or some sort, a PhD in the field or a few years of...
You could look at curriculum's duration, and add a few years of experience on top of that. For example for machine learning you need a master or some sort, a PhD in the field or a few years of work, so about 10 years, for baker you need 2-3 years of studies + a few years of work, etc.
I would check out this website http://www.techladder.io/. It was recently made on https://dev.to/ for Hacktoberfest and walks you through from 5% to expert. It's on GitHub, and while only 3 topics are public on the site 16 are WIP on github
Is there any easy place to track the WIP ones? For example say I wanted to contribute to the Java one, where could I find it besides manually going through all the forks?
https://github.com/remojansen/TechLadderIO in the
technologies/folderHmm... that's odd. Here's the direct link to the GitHub. https://github.com/remojansen/TechLadderIO
If I am reading this question right, this would probably be better asked in ~tech or actually even ~comp, given the highly technical nature of the fields that you're asking about... especially since I imagine a decent amount of people who are subbed to those groups and can answer this question may have unsubbed from ~talk because of its casual nature. If you want me to I can move it there for you, @Wolf. So just let me know. :)
Sure thing. Done. Hopefully you get a bit better response in ~comp than ~talk.
Yeah, it's a pretty interesting but probably quite tough to answer question, IMO... and I certainly don't feel nearly qualified enough to even try. Hopefully someone else who sees this does though. :)
This is an incredibly abstract concept to try to quantify. I don't think you're going to find anything more than perhaps some literature touching upon the subject without an actual scientific backing. If you want some food for thought, however, here's a paper written in 1980 on the subject of a model for skill acquisition. This could be a good starting place for your research into the subject at large :)
Edit: Here is a much better version, which goes into greater detail and isn't so obviously from 1980.
Ah, gotcha. In that case, you're going to have an even more difficult time finding a solid answer. If we go the syllabus route, the only thing you're actually going to get is a measure of a base level of competence with the fundamentals. There are far too many things that you simply won't learn by checking another box on a list of things to learn, unless your goal is to become an expert with a set of very specific technologies. Ultimately general expertise in an area of tech (and really any field, for that matter) is something that comes with first-hand experience and lots of practice.
If you want a checklist of basics, then great, we can get started with a pretty good list pretty easily. But there's just no way to become an expert without breaking away from that list.
Alright, here's a quick syllabus for programming:
Intro
intandfloat.&instead of&&).Basics
privatevs.publicproperties/methods, comparing objects.Intermediate
Advanced
Most people are fine after the
Intermediatesection. That's enough to give you a pretty solid foundation and make you a fairly decent intro level programmer. TheAdvancedsection, however, is highly recommended for anyone. Understanding how your operating system works in particular can help you unearth the root cause of a problem with some tool that's malfunctioning. Even the largely academic parts like auto-balancing tree data structures still help to provide valuable insights into different approaches and tools that are available for solving problems you may end up running into.I've likely missed some pretty important topics here. I may have even miss-categorized some of them. I've kept subjects of purely academic value down to a minimum. I've tried to avoid domain-specific subjects as much as possible (e.g. nothing specific to web programming). More than anything, I highly doubt there will be universal agreement with this list overall. This is based largely on my own personal experiences as both an academic and as a professional and is thus subject to bias. Still, I feel that it gives a fairly powerful set of fundamental subjects that a programmer can make use of in a variety of situations and that the skills you develop learning these subjects are the most transferable between programming languages and problem spaces.
If anyone has any feedback on this list, I'll be sure to hear you out and make any changes where appropriate.
@Emerald_Knight have you seen https://tls.ulfheim.net/ ?
Nice resource! I really wish I'd had this when I first had to learn about SSL/TLS a couple years ago. Perhaps a bit more verbose than is needed for grasping the basic mechanics, but perfect for ironing out the details :)
No problem! I'm glad that you find it helpful :)
Oh, absolutely. There's more than enough information for any given field in tech for gaining a base level of competence.
Personally, I believe that meghan's resource works more for gaining that base level of competence for a specific programming technology (and right now there are only a few languages listed). If you want a general syllabus for gaining competence in programming specifically beyond simply competence in a given language, I'll look into writing something up when I have a little more time :)
You could look at curriculum's duration, and add a few years of experience on top of that. For example for machine learning you need a master or some sort, a PhD in the field or a few years of work, so about 10 years, for baker you need 2-3 years of studies + a few years of work, etc.