[JAVA] Think about what to do for SIer education for young development engineers (Part 3)

This is the 16th day of Stylez Advent Calendar 2018.

I'm Kajiwara, the representative of Styles Co., Ltd..

Continuing from previous, thinking about education for young employees (development engineers from new graduates to the end of their 20s) at SIer (contract system) I am writing.

SIer (contract system) develops a system ordered by a customer, unlike a service company. Also, since the company as a whole makes various systems, there is a high possibility that it will be in charge of systems with completely different contents due to personnel changes.

For example, it looks like this.

Social sites ↓ Gachi internal business system + accounting system cooperation ↓ Highly loaded websites ↓ Data analysis batch system

We will develop such various systems every other year. Infrastructure is also a trend of acclaimed migration to AWS and cloud, so we will use on-preserver (VMware) to AWS, and even partially serverless technology, and we will also need container technology such as Docker and Kubernetes. It's coming. Besides, do AI. .. .. .. .. I feel that it is impossible.

Currently, people around the age of 40 have experienced the progress of Web systems (CGI => Java applet => J2EE => Spring, etc.) as the client server is obsolete, but now young people are in parallel. I feel like I was suddenly thrown out in front of the rapidly evolving technology. What should we do with engineer education in such a situation?

"Thinking about what to do with education for young development engineers of SIer (1)" At the company (Styles Co., Ltd.), we are actually doing it. I wrote about the educational course that I am doing from the new graduate to the end of the second year.

This is really a minimum education

--Being able to write programs in Java (+ Spring Framework) --Understanding how the web system works ――Being aware of writing good code --Somehow you can understand the front end -The server is touched (mainly on AWS)

I was only able to do it to the extent that I was able to graduate from the beginner level.

After that, what should I do to support my growth so that I don't grow up on my own?

First of all

--Intermediate level: Full-fledged development engineer --Advanced level: Good development engineer (?)

I will write a skill map quickly in order to aim for.

image.png

I'm sorry for the too crunchy content. Well, it's hard to go to this street, but I think it's okay if I get this by the early 30s. In the above, the intermediate level is level 2 and the advanced level is level 3.

About level 1, two times before Since I wrote it, I will dig deeper about level 2 this time.

1. Programming (first language) level 2

1.1 Work on refactoring

You need to know refactoring first, and then make it a habit. For this, I need to read the following "Refactoring-Safely improve existing code-" as a reading party, but with a mentor-like senior, discuss how to make it a habit. I need to go. To do that, you need to habitually carry out "code reviews."

[New Edition Refactoring-Safely Improve Existing Code-](http://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82 % AF% E3% 82% BF% E3% 83% AA% E3% 83% B3% E3% 82% B0% E2% 80% 95% E6% 97% A2% E5% AD% 98% E3% 81% AE % E3% 82% B3% E3% 83% BC% E3% 83% 89% E3% 82% 92% E5% AE% 89% E5% 85% A8% E3% 81% AB% E6% 94% B9% E5 % 96% 84% E3% 81% 99% E3% 82% 8B% E2% 80% 95-OBJECT-TECHNOLOGY-Martin-Fowler / dp / 427405019X / ref = sr_1_2? s = books & ie = UTF8 & qid = 1458616485 & sr = 1-2 & keywords =% E3% 83% AA% E3% 83% 95% E3% 82% A1% E3% 82% AF% E3% 82% BF% E3% 83% AA% E3% 83% B3% E3% 82% B0 +% E3% 83% 97% E3% 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% A0% E3% 81% AE% E4% BD% 93% E8% B3% AA% E6% 94% B9% E5% 96% 84% E3% 83% 86% E3% 82% AF% E3% 83% 8B% E3% 83% 83% E3% 82% AF)

--Refactoring-First example --Refactoring Principles --The ominous smell of the code --Test construction --Towards a refactoring catalog --Method configuration --Movement of characteristics between objects --Data reorganization --Simplification of condition description --Simplification of method calls --Handling of inheritance --Big refactoring --Refactoring, reuse, reality --Refactoring tool --From parts to whole --Changes in the environment surrounding refactoring due to Java version upgrade

1.2 Working on good code

Readable Code-Simple and Practical Techniques for Writing Better Code

Has already been called as a book club in the second year, but this also requires code review as a good habit.

1.3 A deeper understanding of the framework

This is quite difficult with in-house education. Regularly participate in study sessions of JAPAN SAP USERS'GROUP (JSUG) and PHP study session And I think it's best to make the story of our predecessors work.

2. Front end level 2

2.1 Basic implementation in a particular JavaScript framework

At Styles, we mainly deal with Angular, but I think that using Angular is appropriate as follows in the case of developing a business system as a SPA (single page application). --Full stack --Use with Typescript

However, even with a small system, I'm a little confused as to whether it's okay, so I think it's react or Vue. Anyway, it is meaningless unless it is actually used in a project (meaning of actual business), so I think it is most important to sequentially assign to projects that use the JavaScript framework in earnest.

3. Infrastructure level 2

3.1 Convenient use of shell scripts on a daily basis

Whether it's AWS or on-premise, the basics of shell scripting are very important for automating everyday things. Organize the same logs every day and send the results to the people involved by slack or email. It would be a big difference if I could check the schedule every day and take 30 minutes manually, but it would be completed in 1 minute automatically.

Ah, it's important to learn the basic techniques of regular expressions at the same time.

[Practical technique for shell programming](https://www.amazon.co.jp/%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD% E3% 82% B0% E3% 83% A9% E3% 83% 9F% E3% 83% B3% E3% 82% B0% E5% AE% 9F% E7% 94% A8% E3% 83% 86% E3% 82% AF% E3% 83% 8B% E3% 83% 83% E3% 82% AF-Software-Design-plus-% E4% B8% 8A% E7% 94% B0 / dp / 4774173444)

--Chapter 1 Preparatory movement --Chapter 2 Searching and processing irregular sentences and configuration files --Chapter 3 File handling and system operation --Chapter 4 Making the file system a database --Chapter 5 Process large data --Chapter 6 Handles images, spreadsheet software, and other special data --Chapter 7 How to interact with the CLI-like Internet --Chapter 8 Calculation

[Regular expression writing drill with iterative learning software](http://www.amazon.co.jp/%E5%8F%8D%E5%BE%A9%E5%AD%A6%E7%BF%92%E3% 82% BD% E3% 83% 95% E3% 83% 88% E4% BB% 98% E3% 81% 8D-% E6% AD% A3% E8% A6% 8F% E8% A1% A8% E7% 8F % BE% E6% 9B% B8% E3% 81% 8D% E6% 96% B9% E3% 83% 89% E3% 83% AA% E3% 83% AB-WEB-PRESS-plus / dp / 4774145092 / ref = sr_1_2? s = books & ie = UTF8 & qid = 1458600709 & sr = 1-2 & keywords =% E6% AD% A3% E8% A6% 8F% E8% A1% A8% E7% 8F% BE)

--Chapter 1 How to proceed with learning and swing software ――Chapter 2 Basics of regular expressions What are regular expressions? --Chapter 3 Basic Meta Character --Chapter 4 Using parts in combination --Chapter 5 Convenient functions of regular expressions --Chapter 6 More practical regular expressions

3.2 Practical use of Docker

I think that the target skill will be to be able to build the development environment you want using Docker.

The story that made building a development environment 10 times easier with Docker I think that you can handle it yourself while understanding it.

However, depending on the speed at which container technology becomes widespread in the future, it may be overtaken by reality.

5. RDBMS level 2

Understanding SQL performance

Writing complex SQL

I want you to be able to write complicated SQL properly. Is it about the following as an assumed level?

[Clearly understand SQL introductory drill with 215 questions!](Http://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3 % 82% 8F% E3% 81% 8B% E3% 82% 8B-SQL-% E5% 85% A5% E9% 96% 80-% E3% 83% 89% E3% 83% AA% E3% 83% AB215 % E5% 95% 8F% E4% BB% 98% E3% 81% 8D-% E3% 82% B9% E3% 83% 83% E3% 82% AD% E3% 83% AA% E3% 82% B7% E3% 83% AA% E3% 83% BC% E3% 82% BA / dp / 4844333933 / ref = pd_cp_14_3? Ie = UTF8 & refRID = 1T98M4P3G7BCN5V0W78X)

--Chapter 1 First SQL --Chapter 2 Basic Grammar and 4 Major Instructions --Chapter 3 Narrowing down the lines to operate --Chapter 4 Processing of search results --Chapter 5 Expressions and Functions --Chapter 6 Aggregation and Grouping --Chapter 7 Sub-inquiries --Chapter 8 Joining Multiple Tables --Chapter 9 Transactions --Chapter 10 Creating a table --Chapter 11 Various support functions --Chapter 12 Table Design

Regarding SQL performance, it is assumed that each DBMS can write SQL while assuming an "execution plan".

[Introduction to SQL practice ── How to write a fast and easy-to-understand query (WEB + DB PRESS plus)](http://www.amazon.co.jp/SQL%E5%AE%9F%E8%B7%B5%E5%85 % A5% E9% 96% 80% E2% 94% 80% E2% 94% 80% E9% AB% 98% E9% 80% 9F% E3% 81% A7% E3% 82% 8F% E3% 81% 8B % E3% 82% 8A% E3% 82% 84% E3% 81% 99% E3% 81% 84% E3% 82% AF% E3% 82% A8% E3% 83% AA% E3% 81% AE% E6 % 9B% B8% E3% 81% 8D% E6% 96% B9-WEB-DB-PRESS-plus / dp / 4774173010 / ref = asap_bc? ie = UTF8)

--Chapter 1: DBMS Architecture ──Is there just food in this world? --Chapter 2: SQL Basics ── Like speaking your mother tongue --Chapter 3: Conditional branching in SQL ── From statement to expression --Chapter 4: Aggregation and Cut ── The World of Aggregation --Chapter 5: Loop ── Procedural curse --Chapter 6: Joins ── Those who control joins control SQL ――Chapter 7: Subqueries ── Should difficulties be divided? --Chapter 8: Order in SQL ── Procedural Revived --Chapter 9: Updates and Data Models ── Blind Super Soldier ――Chapter 10: Mastering the index ── Weaknesses of talented people

6. Overall architecture skill level 2

In particular, I would like you to learn the basic know-how regarding system scale-out. For example, I want you to be able to build and use Elasticsearch and ElasticCache on AWS. Also, it is necessary to measure the server load to determine where the bottleneck is, and to acquire knowledge to eliminate it.

7. Basics of database design

Database design (RDBMS for the time being) is a very difficult skill to learn. There are few good books, and I think there aren't many seniors who have their own database design.

--Chapter 1 Those who control the database control the system --Chapter 2 Logical Design and Physical Design --Chapter 3 Logical Design and Normalization-Why Do Tables Need to Be Split? --Chapter 4 ER diagram-Expressing the relationship between multiple tables --Chapter 5 Logical Design and Performance-Disadvantages and Denormalization of Normalization --Chapter 6 Database and Performance --Chapter 7 Bad know-how of logical design --Chapter 8 Gray know-how of logical design --Chapter 9 Advanced Logical Design-Handling Tree Structures with SQL

For the time being, I wrote it with the image of up to level 2 (about 3-5 years after joining the company).

Of these, I would like to write about Level 3 (about 6-8 years after joining the company).

Recommended Posts

Think about what to do for SIer education for young development engineers (Part 1)
Think about what to do for SIer education for young development engineers (Part 3)
Think about what to do with education for young development engineers of SIer (Part 2)
[Output] Learn Ruby from what you want to do at the fastest speed ・ Part 1 "Think about what you want to make"
What Java engineers need to prepare for the Java 11 release
[For beginners] Ruby is said to be ruby, but what about it?