Monday, November 9, 2015

The story of titles - Chuyện cái tên

src: phd comics
When I got my university orientation, I was fascinated to learn the differences between Computer Science (software) and Computer Engineering (hardware), and awed when the professor explained the various career pathway my choice would lead me to. The more courses I took, the better I understood that a successful software project is the contribution of many professions: developer, business analysts, tester and so on. I felt both overwhelming and excited of all the knowledge a project requires.

But after a while, the novelty of specialisation died out. Many seemed to fall in love with the ego boost from their specialisation and got distracted from what really mattered in a software project, the product. All the buzz around programming rockstar or javascript ninja was very eerie to me. I couldn't help but feel indifferent at all the attempts people made to discriminate Coder, Programmer, Developer and a few others, as if it was some sort of Indian caste system.

The ultimate goal of a job title is to provide a common understanding of the scope of responsibility each holds in a software project. As in a developer shouldn't try to set up production environment in the same ad-hoc way he did on his computer and should rather leave the heavy lifting to a system administrator.

But then, does it mean if I was a backend developer, and the frontend of the project I am working was a total disaster, then it would be none of my business? Does it mean if the project was late and everyone was fire fighting, but my part was elegant, flexible, and maintainable, then "good luck, suckers"?

Software development is a very personal experience to me. Given an idea that I find challenging, and that would be the only thing in my mind every waking hours. And if someone tries to stand between me and the good product I am busting my ass to build, just because that wasn't my role to do such and such, she can talk to the hand, because the face doesn't give a damn.

One-man army is nothing new in this industry. One most likely to find such title associated with either an overachiever or a craftsman. Though the course of action might be identical, there is a subtle between the two. The overachiever spends many years of his life being the best in class, slowly turns into a narcissist who assumes everyone is an idiot and choose to be all on himself. His motto is "trust no one and no one will hurt you". The craftsman devotes a good portion of his life to better himself, yet at the same time, appreciates and respects the skills of others. The overachiever wants to be the best. His success is a product of comparison. The craftsman understands that mastery is not a zero-sum game. His success is a product of self retrospection.

I believe the highest stage of any profession is to become independent. Independent in terms of vision, knowledge, and approach. An apprentice spends many years of his life doing others' chores, but that is not his goal but a means to an end. Eventually, that hard work is to prepare the apprentice the foundation of mastering his craft. When one possesses the means, and, more importantly, determination to be independent, he is free from collective thoughts and can live true to his reasoning mind. Any form of creative collaboration should be a free agreement and everyone is free in his proper function.

In recent years, the community has acknowledged this journey of mastery and welcomed the rise of full-stack developers. But the problem with full-stack developer is that "full" refers to a state of finish, of completeness, done! The feeling that I am done with studying, that there is absolutely nothing else I can learn leaves me quite devastated. Furthermore, a sizeable number of conversations I had with full-stack developers went like this
- So you do everything?
- Yeah pretty much.
- Great, how do you deploy your app across all those clusters all by yourself?
- Oh it's sysadmin work, I am more a developer.
- Oh yeah. Never mind. So do you enjoy the freedom cloud computing is offering?
- Sure I do. I have heard lot of good words about it. At the moment, I am focusing on the client side of system and leaving the dirty work to BaaS.
- Like Parse?
- Yeah like Parse.
- How do you get JavaScript to hook up to Parse?
- Oh web is so yesterday. The world is all about apps now. There is where my heart is.
- So you are a mobile developer?
- Yeah. A full-stack mobile developer it is.
- Oh! So... beer?
- Yes, beer please.
To capture the truest meaning of what I want to be in my life, I couldn't find a better word than the old-school, plain, simple Software Engineer. It blurs the artificial lines drawn upon professions and opens a vast, new canvas of creative thoughts. That is the ultimate joy of my inner boy.

========================

src:funtoosh

Ngày còn đi hướng nghiệp ở trường, là nơi người ta bảo bạn nghề này nghề kia, tôi say mê với những khác biệt, bự banh chành cũng như bé tí hi của Khoa Học Máy Tính (phần mềm) và Kỹ Thuật Máy Tính (phần cứng). Tôi quên luôn cả khép quai hàm khi thầy giáo kể về một tràng các con đường khác nhau mà lúc nào đó tôi sẽ chọn. Sau học thêm nhiều khóa, tôi càng hiểu rõ rằng một dự án phần mềm là đóng góp của rất nhiều mảng: viết code, phân tích hệ thống, kiểm thử, etc. Tôi vừa háo hứng, vừa choáng ngợp với lượng kiến thức cần có để theo đuổi một dự án.

Về sau đi làm, sự mới mẻ của các chuyên ngành dần nhạt đi. Nhiều người yêu quá cái khác biệt, độc lạ của ngành hẹp mình theo, mà lơ là kết quả quan trọng duy nhất của một dự án: sản phẩm. Dần dà, tôi từ hứng thú đến xa lánh những cái tên programming rockstar, hay javascript ninja. Tôi không hiểu được đủ kiểu phân biệt Coder, Programmer, Developer và vài cái tên khác tôi tìm thấy trên Internet. Như thể một kiểu phân chia đẳng cấp ở xứ Ấn Độ thờ bò.

Cho cùng, những chức danh trong công việc là để người này biết người kia chuyên về mảng gì, trách nhiệm ra sao. Để nhắc bạn lập trình đừng cố dựng server production bậy bựa như trên máy cá nhân, và cứ để sysadmin cài đặt hệ thống cho ra ngô khoai.

Nhưng mà, vậy thì chẳng lẽ nếu tôi là lập trình database, mà giao diện dự án nát bét, thì đó hông liên quan gì đến tôi? Lỡ mà project trễ, ai cũng cong đít lên làm, nhưng góc của tôi thì vừa đẹp vừa chạy nhanh, thì "chúc vui"?

Làm phần mềm, với tôi là một hành động cực kỳ cá nhân, và có lẽ là việc duy nhất tôi đủ giỏi để nuôi mình. Chỉ quăng cho tôi một ý tưởng khó là đủ để tôi đè nó, văn vẹo nó, rồi ôm nó ngủ trọn một ngày. Và lỡ mà có ai đứng ngáng giữa tôi và cái ý tưởng khó gặm đó, thì nói thiệt là tôi không có ý làm lơ bạn, nhưng đầu tôi đơn nhiệm, không để ý được mấy thứ khác.

Trong nghề này, ít nhất một lần bạn đã nghe ai đó kể về một đứa ba đầu sáu tay một mình ôm nguyên dự án rồi, không có gì lạ. Cái "chức" ba đầu sáu tay này thường dính với hoặc một đứa ngựa non háu đá hoặc một tiền bối. Hành động có thể giống nhau, nhưng hai dạng này, đụng vô thấy khác liền. Ngựa choai choai thường là đứa học giỏi nhất trường, nhất lớp, từ từ biến thành đứa vị kỷ, nhìn đâu cũng thấy người ta ngu hơn mình, nên thà tự làm còn nhanh hơn đi nhờ cho rác việc. Khẩu hiệu của bầy ngựa này rất triết đểu,"không tin ai thì không ai hại mình được". Tiền bối thường do sống lâu lên lão làng, dành một phần đời mình chui rèn trên bàn phím, luyện được mắt nhìn phân biệt vàng mười, vàng thau, trọng người cùng chí hướng. Con ngựa nào cũng muốn mình là nhanh nhất, thành công là một cuộc đua. Tiền bối hiểu rằng có đủ đường cho tất cả mọi người, thành công là tự ở tâm.

Tôi có niềm tin rằng trong mọi nghề nghiệp, được độc lập là mức độ hiểu biết cao nhất. Độc lập trong tầm nhìn, kiến thức, và đường đi. Thằng học nghề dành nhiều năm làm những việc tủn mủn không tên, nhưng đó không phải đích đến của việc học nghề, mà là con đường. Lao động cực nhọc là nền tảng chuẩn bị thằng học việc trở thành anh thợ chính. Khi tôi tự do làm việc mình muốn, đầu óc tôi được giải phóng khỏi những suy nghĩ đám đông, những hội đồng ban bệ, tôi được sống trong cái tôi của mình. Tất cả những người làm việc sáng tạo điều được quyền sống với cái tôi sáng tạo của mình.

Mấy năm nay, cộng đồng đang nhận ra xu hướng này và chào đón thêm nhiều các full-stack developers. Vấn đề với full-stack developer là cái chữ full trọn vẹn tròn đầy quá. Cảm giác nếu mà một ngày tôi không còn gì để học thêm nữa, làm tôi lo hơn mừng, tôi biết làm gì với thời gian đây? Thêm nữa, nhiều lần tôi làm quen các bạn full-stack developer thì chuyện đi thế này
- Vậy cái gì bồ cũng làm hả?
- Ừ, full-stack.
- Ngon. Vậy mình bồ tự đưa code lên máy chủ của Amazon luôn?
- Không, việc đó là của sysadmin, tôi chỉ tập trung vào phần nào liên quan đến lập trình thôi.
- À, vậy hả, nhưng mà chắc cũng có dùng cloud đúng không?
- Ừ rõ rồi. Nghe bảo có nhiều tính năng hay lắm. Mà mấy nay đang coi phần giao diện, mấy việc phía sau giao cho BaaS hết.
- Kiểu như Parse?
- Ừ, như Parse.
- Ủa mà JavaScript giờ chọt vô Parse được rồi hả?
- Ôi web xưa rồi, giờ cái thì cũng có apps, đó mới là tương lai!
- Vậy bồ làm mobile hả?
- Ừ, full-stack mobile
- À à, thôi "dzô" đi, nói quài!!!
- DZÔ!!!
Để gói gọn hết mong ước được làm phần mềm đến già, tôi thấy không chữ nào lược giản, rõ nghĩa như Software Engineer. Chức danh đơn giản vậy, làm nhòa đi ranh giới tưởng tượng của từng vị trí, mở rộng thế giới của mình. Tôi lại được thấy phần mềm như khi tôi còn tập viết Visual Basic trên máy của ba.