- 投稿日:2019-10-20T20:12:25+09:00
大学を中退後、未経験エンジニアとして入社し半年が経ちました
自己紹介
はじめまして。いち(@Ichi929 )と申します。
この記事はタイトル通り未経験からエンジニアになった振り返りと、今後に向けてのアウトプットの意思表明、
また同じように未経験からエンジニアを目指す人の助けになればと思い投稿します。私の今までの過程をざっと振り返ると
大学受験失敗
↓
なんとなくで決めた地方文系学部へ進学
想像していた学習レベルとのギャップで大学をサボりがちに
↓
結果2留
↓
このまま2年ハンデを背負い卒業し、しょぼい学歴の新卒カードを得た(24歳)になるより技術職を目指そうと考える
↓
大学を退学(2018年春)
↓
プログラミング学習と就職の場を求め上京(2018年6月)
↓
スクールでJavaを学びつつ就活(就活は8月頃から)
↓
10月末に内定
↓
1月からエンジニアとしてお仕事をし今に至る
(9ヶ月だから既にタイトル詐欺)どんな働き方をしているか
SESとして客先常駐Javaエンジニアとしてお仕事をしています。
(SESとしての働き方や給与フローについては思うところはありますが、それも含めた話ついてはまた別でまとめる予定です)キャッシュレス対応改修作業
言語:Java、HTML、JavaScript
DB:Oracle
フレームワーク:SpringベースのカスタムフレームワークECサイト基盤構築作業(←イマココ)
言語:Java、HTML
DB:Postgre
フレームワーク:独自フレームワーク実際にエンジニアとして働いてみて
やはり感覚として感じるのは、知的好奇心が非常に重要だなと感じました。
ノルマだけを期日内でこなしているだけのエンジニアは以前の現場でも今の現場でもいますが、
やはり伸び悩んでいる(伸びる気がない?)ように見えます。良くも悪くも、調べてもわからないことは開き直り、先輩方やチームメンバにガンガン聞きに行くことが苦ではない性格が幸を奏して、
半年前より実装やその意図が徐々に見えてくるようになりました。
(※時間を割いて対応してくださる先輩やメンバには頭が上がりません)エンジニアに学歴は必要ないのか
よく言われる「エンジニアに学歴は必要ない」というのは半分ウソで半分本当だと感じています。
一部大企業ではフィルタが存在するとも言われていますが、現状の肌感では学歴を聞かれたことはありませんし、
企業の方とお話していてもそういった話は聞きません。
技術や経験を質問されることは多いので、やはりチームメンバとして力になるかどうかを問われている気がします。未経験からエンジニアになろうとしている方へ
エンジニアになるためにもっとも必要なのは
・行動力
・知的好奇心だと思いますので、まずは行動をすることが重要だと思います。
日々できることが増え、コーディングをすることに喜びを感じられるのはエンジニアならではだと思います。
まずはオンライン学習が可能なサイト(Progateやドットインストール等)で触れてみるのもいいでしょう。ただやはり実際にわからないことが聞ける環境というのは大切なので、その際はteratailを利用したり、プログラミングスクールに通うのも手だと思います。
学習言語についてもSIer/Web系等、目指す業界によっても最適な言語は変わってくるので、よく調べることをおすすめします。(ソースは俺)
私のこれから
Java単体としての実装は読めるようになり、コーディングも問題なく一人で可能な事が増えてきましたが、
どうしても各フレームワークの理解や開発アーキテクチャ、データベースへの理解など、まだまだ学ぶべきことは多くあります。
そのため、これからは興味のある言語や技術を学習しつつ、Web周りの知識等を積極的にキャッチアップしてアウトプットもしていきたいと思います。
- 投稿日:2019-10-20T14:38:12+09:00
Maven で「詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください」と表示されたときの対処
「詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください」と言われる
$ mvn compile (中略) [WARNING] /Users/az/app/src/main/java/MyApp.java: /Users/az/app/src/main/java/MyApp.javaの操作は、未チェックまたは安全ではありません。 [WARNING] /Users/az/app/src/main/java/MyApp.java: 詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。対処方法
pom.xml の plugins 要素に以下のように Compiler Plugin の設定を追加する。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <compilerArgs> <arg>-Xlint:unchecked</arg> </compilerArgs> </configuration> </plugin>これで具体的な警告内容が表示されるようになる。
[WARNING] /Users/az/app/src/main/java/MyApp.java:[50,17] raw型java.util.Mapのメンバーとしてのput(K,V)への無検査呼出しです [WARNING] /Users/az/app/src/main/java/MyApp.java:[53,12] 無検査変換 期待値: java.util.Map<java.lang.String,java.lang.Object> 検出値: java.util.Map今回の環境
- Apache Maven 3.6.2
- OpenJDK 11.0.2
参考資料
- 投稿日:2019-10-20T14:01:10+09:00
[Stable] Install openjdk-8-jdk safely in Raspbian Buster (Debian 10) environment
1.Introduction
My past article How to install openjdk-8-jdk on Raspbian Buster armhf and How to install openjdk-8-jdk on Debian Buster (Debian 10) armhf procedure required installing an unstable "sid" package, which caused glibc2.29 to be installed without permission. This time I will describe the procedure for installing openjdk-8-jdk without installing the unstable "sid" package and keeping the whole environment correct. The standard glibc for Raspbian Buster (Debian 10) is
glibc2.28
. Note that openjdk-8-jdk is required to build Bazel.2.Environment
- RaspberryPi3 / 4
- Raspbian Buster (Debian 10)
- openjdk-8-jdk
3.Procedure
Advance_preparation$ cd ~ $ sudo apt-get update $ sudo apt-get install -y \ apt-transport-https ca-certificates \ wget dirmngr gnupg software-properties-common $ wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add - $ sudo nano /etc/apt/source.list ### Add the following line to the last line deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main ReleaseCtrl + O
Ctrl + XInstall_openjdk-8-jdk### A warning message appears several times, but you can ignore it. $ sudo apt-get update $ sudo apt-get install adoptopenjdk-8-hotspot $ sudo nano /etc/apt/source.list ### Delete the following line to the last line deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main ReleaseCtrl + O
Ctrl + XUpdate_package_list$ sudo apt-get update4.Appendix
You can also try the standalone installer with a deb file.
1. openjdk-8-jdk for armhf (.deb) download link
2. openjdk-8-jdk for aarch64 (.deb) download linkFor_armhf$ curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=1LQUSal55R6fmawZS9zZuk6-5ZFOdUqRK" > /dev/null $ CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)" $ curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=1LQUSal55R6fmawZS9zZuk6-5ZFOdUqRK" -o adoptopenjdk-8-hotspot_8u222-b10-2_armhf.deb $ sudo apt-get install -y ./adoptopenjdk-8-hotspot_8u222-b10-2_armhf.debFor_aarch64$ curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=1VwLxzT3EOTbhSzwvRF2H4ChTQyTQBt3x" > /dev/null $ CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)" $ curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=1VwLxzT3EOTbhSzwvRF2H4ChTQyTQBt3x" -o adoptopenjdk-8-hotspot_8u222-b10-2_arm64.deb $ sudo apt-get install -y ./adoptopenjdk-8-hotspot_8u222-b10-2_arm64.deb5.Reference articles
https://linuxize.com/post/install-java-on-debian-10/#installing-openjdk-8
https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/pool/main/a/adoptopenjdk-8-hotspot/
- 投稿日:2019-10-20T13:36:25+09:00
文字列フォーマットの標準API
String.format
String#format.javaString formated = String.format("私は%sです。", "太郎");MassageFormat#format
Message#format.javaString template = "私は{0}です。"; String formated = MessageFormat.format(template, "太郎");パフォーマンス
MassageFormatの方が断然早い。
API 10,000回実行 100,000回実行 String#format 0.2269983S 1.2679988S Message#format 0.0730008S 0.2999999S
- 投稿日:2019-10-20T10:23:48+09:00
SpringMVC-Interceptor機能
Interceptorとは
SpringFrameworkでは\@Controllerアノテーションを付けたControllerクラスがリクエストを受けてレスポンスを返す処理を行う。
ControllerクラスはDispatcherServletがリクエストURLからControllerクラスを抽出して実行する。
Inerceptorは、画面処理の前後とリクエストの一番最後に呼び出される割り込み処理で、Inerceptorを使うとControllerの実行前後に処理を追加することができる。
例えば、アクセス元のIPアドレスをログに出力する場合はInterceptorを使う。Interceptorの仕組み
実態:org.springframework.web.servlet.HandlerInterceptorインターフェース
HandlerInterceptorインターフェースをDispatcherServletが実行している。
メソッド 戻り値 実行タイミング preHandle booean Controller実行前 postHandle void Controller実行後~viewレンタリング前 afterCompletion void viewレンタリング後 HandlerInterceptorのAPIReference
Interceptorの作成方法
Interceptorを使ってアクセスしてきたIPアドレスをログファイルに出力してみる。
<手順>
1. org.springframework.web.servlet.HandlerInterceptorの実装クラスを作成する
1. applicationContext.xmlにインタセプターを定義するなお、SpringMVCプロジェクトは下記の手順で作成したものを使用する
SpringMVCプロジェクト<今回検証した各モジュールのバージョン情報>
モジュール version STS 3.9.9 JDK 1.8.0_221 Tomcat 8.5 SpringFramework 3.1.1 Thymeleaf 2.1.6 Interceptorの作成方法①
org.springframework.web.servlet.HandlerInterceptorの実装クラスを作成し、
preHandleメソッド内でIPアドレスを出力する。HogeIntercepter.javapackage hogehoge; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class HogeIntercepter implements HandlerInterceptor { private static final Logger logger = LoggerFactory.getLogger(HogeIntercepter.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO 自動生成されたメソッド・スタブ logger.info("URI:" + request.getRequestURI()); logger.info("IPアドレス:" + request.getRemoteAddr()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO 自動生成されたメソッド・スタブ } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO 自動生成されたメソッド・スタブ } }Interceptorの作成方法②
applicationContext.xmlにインタセプターを定義する。
applicationContext.xml<beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> ・ ・ ・ <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <beans:bean class="hogehoge.HogeIntercepter" /> </mvc:interceptor> </mvc:interceptors> </beans:beans>実行結果
ログ出力内容
INFO : hogehoge.HogeIntercepter - URI:/hogehoge/
INFO : hogehoge.HogeIntercepter - IPアドレス:0:0:0:0:0:0:0:1
参考サイト