Unexpectedly, I started to make IT my business. I'm doing PM for IT products now, but at first I had to catch up with everything, even though I was "inexperienced".
I think that the first step for "humanities / inexperienced" to understand and acquire technology is to assign it to a development project and get feedback. In my case, I didn't have a lot of people / information to rely on, so I learned programming after trial and error, and I'm still here. I hope this article will be of some help to you by looking back on such pretty selfish programming learning.
At the end of the article, I have summarized the reference books and sites used for learning, so please have a look there as well.
I've made something, used teaching materials, and used references to the extent that there is no end to the list, but I've listed eight of them that I feel were particularly effective in learning.
At first, I also deal with Progate and other things separately, and the theme is how to step up from there.
Very earliest learning method. In the step of "I understand grammar at a programming school or online teaching materials, but what should I do next?", I think it is very good to decide what you want to make and develop it. You can make anything, but the essence of 1. is to "calculate back from the deliverables and understand the necessary concepts and logic."
For example, LINE Bot development is highly recommended when you want to make something at the very early "beginner" level. This is simply "try to create a script that receives input from LINE and processes it."
There are three main reasons to recommend it.
--Easy logic from input to output --Can be created with a scripting language like Ruby ――It's easy, but you can make something that feels pretty good, and you can get a sense of accomplishment.
I wonder if the third one is especially important. It's fairly easy to make, but it's easy to get a sense of accomplishment. You can enjoy the combination of Google Apps Script (the one called GAS) and LINE Bot even after you can do it for a while. If you search on the net, you will find various implementation examples. If you think of a spreadsheet as a simple DB and configure it like "receive input from LINE and return data", you can also create a foundation for "UI --logic --DB" and learn a lot.
In my understanding, Google Tech Dev Guide is a thematic programming material site curated by Google. It is easy for beginners to work on, as it is classified according to purpose and level.
I think the difficulty level of this teaching material is just right if you try after clearing 1. Although the content is solid enough to seem like it is, there are teaching materials that even beginners can work on with a certain amount of head. After doing it all, I was able to make a little algorithm myself.
"1. Decide and create a simple web application" has "fun to complete something", but has the disadvantage that you have to think about what to make frequently. If the course is decided as in 2., it will be easier to proceed from the end, so I think that there is an aspect that makes it easier to concentrate on learning.
A spectacular "hobby development" project. This was really magnificent, and I was doing something like "make a SPA that you would normally use."
I've been making it for less than a year, mainly on Saturdays and Sundays ... The front and back ends were largely separated and the two projects were underway at the same time. Since I proceeded with the project on the front side and the project on the back end side in parallel, I feel that the amount of code has tripled. The motivation at this time was to consistently design and release the front, logic, and DB (laughs), and I implemented and tested it consistently.
This project was often messed up, so I'm glad I did it. To give you some good points,
――I wrote it quite seriously, so the code base was sophisticated enough to be reused elsewhere. ――E2e created what you certainly envisioned ――I made my own deployment platform and server / network configuration, and literally "launched the system" ――I was able to extract a part of the source code written here and make it into a small library. ――A sense of accomplishment that created something that feels good ――You will be able to imagine the front and back of services in the world, and the structure from top to bottom.
etc. There seems to be a little more.
This project produced a lot of code, so I cut out a part of it and maintain it as my favorite library. It is memorable because the sources created by such derivation also remain as assets.
In my company, there is no role of engineer (strictly speaking), and I ask a partner who has a resident IT work. And all the source code running in the business is placed in the in-house version control system so that anyone can read it at any time. For a while, I learned by reading the sources of various projects without getting tired of it, and I have listed them here.
This learning method may be a little tricky task. People's source code is completely unclear just by reading it. I didn't really understand ... There are some points to be aware of when reading the sources accumulated by others while sitting down, so I will list them.
There are a lot of classes in the standard library and dependent libraries that you've never heard of. I read the source code from the top and searched for the class I didn't understand with "Java 〇〇" (where 〇〇 is the class name). It's a good idea to continue with the official documentation here. The official documentation is rarely omitted and can be difficult to understand at first glance, but it provides just the right amount of knowledge. In the future, when you start something else, "official document decoding ability" will be your own strength. I've been reading Javadoc all the time ...
This was also messed up ... I don't know the context in which the code was written in the first place, even if I read the source of a person. The stacked context of the source is not very clear from the source alone, "Who are you (classes, methods, properties you don't know ..." It's getting better. At that time, I was in agony because I was "too wrapped and I don't understand the substance" ... For the time being, I think it's a good idea to follow the called class multiple times and go back to the point where a concrete implementation comes out. The impression is that the "unknown structure" has been called and implemented / extended about 4 to 5 times.
But 2 still doesn't know the best practice, I'm still struggling.
Depending on the project, the difference between cool logic / structure and not so is huge.
As a beginner, I was often confused because I couldn't decide what kind of logic / structure was good after all. Often you want to do something similar, but the logic is different in one place and another.
In my personal impression, unless it is an implementation of a well-known framework or library, I think that there are few projects that follow the "super royal road", and in that sense, "all sources are implementation examples". I will understand it. It is said that not all the sources that are running in production are organized along the royal road (laugh)
And that's right. Not all of them are super cool (with various restrictions).
Compared to other learning methods, it was studying mathematics that gave me the most valuable information. It was a method with very high learning efficiency, starting with something like "I've become able to do a little web application while researching it." Among the eight learning methods listed, the learning effect was particularly high.
For those who have graduated from the information system, it is natural that mathematics is important, so it is not arguable, but that's right, the (general) computer itself is designed based on the idea of discrete mathematics. It has been done. That's why I think mathematics is indispensable for working with computers.
As for what I did, I did some textbooks and materials on the web that information students for undergraduate students do, mainly classroom lectures. I did various things here as well, but to give a few examples
What area of curriculum do you study? Is selected with reference to the range of questions in the Applied Information Technology Engineer Examination.
At this time, after I got home, I went home for several hours every day for several months to open textbooks and solve math problems (laughs). Even when I was a student, I used linear algebra and simple calculus, so I didn't feel that I was very good at mathematics, and I was very lucky. I felt the need and studied, but the lecture itself was purely interesting. Discrete mathematics was very interesting because it had a unique scent because it was an area I hadn't touched on before.
I'm curious about the principle of anything I handle, and I want to keep chasing "Why is that?" In programming. I learned here (finally) that mathematics is a super important tool for self-solving "why is it?" In programming, and I was excited every day when I was doing textbooks. I could understand from the principle part that the structure handled in mathematics would be such a structure when trying to express it in a class.
On the other hand, it is full of "study at school" feeling, and if you do not sit down, there is a high possibility that it will not be fun on the way ... Not recommended for everyone.
It's a royal road in the royal road, so it's strange to enumerate "C language is super good!" In a loud voice ... As is often said, C has influenced many other languages, and I wonder if it's okay to do it once.
When programming for the purpose of creating something and moving it, I think that it is often easier to use other languages and tools, so learning C language is to "define properly and make it work properly". I learned for that purpose. The purpose of C language was to "know the principle" by studying together with the mathematics of 5. Therefore, while looking at the sample of the learning site, I only touched it to the depth of writing lightly, compiling and moving.
Although I haven't been able to follow up very deeply, I tried to implement algorithms and data structures in parallel with C language.
The area around the pointer, which is often said to be "easy to trip", leaked, and I also noticed "Is this a deep zo ?!" on the way. Only around the pointer was studied in a separate book, and O'Reilly was good.
I still refer to this book from time to time. It was very helpful in that it explained the "front side" that can be seen by humans and the "back side" of physical movements in a moderate abstraction. I especially like the memory management crap.
I think it's a good idea to refer to the standard API of some programming language each time. In my case, I use Java for work and often touch Kotlin for private use, so I often read the JDK source.
Once you get used to it, you may think that it is natural to read the standard API or the source of the library, but as a personal impression, "being the head family" is a high hurdle.
I think it's good to do this in the sense that you can directly see what the head family is doing. On the contrary, what you can get other than this may be small. The side effects may be that when you use some standard API classes or methods, you'll be more convinced and avoid misuse. The usage can be solved by reading the document.
By the way, 7. is close to "4. Read the source code of the development partner". All you have to do is find a class or method that you are interested in or want to understand more, and dig up "What is this?" The difference from "4. Reading the source code of the development partner" is that the standard API is more abstract and the class structure is heavy, so it is difficult to follow.
Not only the app, but also the item "Let's try to control the app platform by yourself". Whether it's Azure or GCP instead of AWS, you can choose your favorite IaaS. It doesn't have to be IaaS, and it's good if you can prepare an environment where you can easily set up "network and server".
A long time ago, there was a time when I was working as both an infrastructure team and an application team, and I was doing something like assembling a server and putting it in the middle, so I worked on it as a complement to my work. I also created the foundation for deploying the magnificent hobby app created in "3. Magnificent" hobby development "and derivative projects" and built it to the point where it can be operated. Configure the network, put the server in it, put it in the middle, and deploy the application.
AWS has a lot of documentation and tutorials (though I'm not saying it), so I think you can do a lot by reading and assembling the documentation.
I entered AWS for work, so I didn't know the tutorial, and after opening my account, I was surprised that "Is there such a powerful tutorial ...". This is really amazing, isn't it ... When I read it, I want to move it. I tried some of the themes that appear in the tutorial, and it was easy to understand what I wanted to explain and what I wanted to do, and it was fun as usual (laughs).
From the viewpoint of application development, it is best to prepare your own VPC and subnet while watching tutorials, set up a server in the network, and follow a series of steps to assemble the operating infrastructure.
Even now, I'm still in the discussion of architecture while PM, and what I don't understand is very useful for setting up a small demo with my account and studying.
Of course, the learning method is important and I think that various trials and errors should be done, but unless you have "curiosity", you will not get used to it easily. While writing this, do you think about Why as much as or better than How? I think that is a big issue. Even if you look at the people around you, those who usually make or study some kind of program should not feel that their curiosity is more than their duty or necessity. And although I happened to have the opportunity and need to touch it in my work, I never thought I would be so absorbed in it.
Anything is fine, so it might be a good idea to start by digging into the technology you are interested in.
The ones that appear in the text and the ones that do not appear are helpful.
2.Google Tech Dev Guide
-Discrete Mathematics (Computer Science Textbook Series) -Introduction to Computational Model Theory-From Turing Machine to Lambda Calculus -Discrete Mathematics -Introduction to Computer Systems-Computer Principles and OS Structures Learned from the Basics -Programmer's Mathematics 2nd Edition
-C language -Basics of C language that you can learn in a week -Detailed C pointer (Japanese) -Algorithm Introduction 3rd Edition Volume 1: Basics, Sorting, Data Structures, Mathematics (World Standard MIT Textbook)