viphat / til

Today I Learned
http://notes.viphat.work
0 stars 1 forks source link

Soft Skills for Developers #1

Open viphat opened 8 years ago

viphat commented 8 years ago

Sometimes we don't need new information - we just need to be reminded!

Section 1 - Career

Having a business mindset

Software Developers need a business mindset for their career (This is crucial to managing your career, because when you start to think of yourself as a business, you start to make good business decisions.). But how to think like a business?

Businesses are constantly revising their products and improving them. You should too.

Chương này thì mình đã đọc nhiều ở những quyển self-help khác, ở đây, SKS nhắc mình nhớ lại tầm quan trọng của mục tiêu, cách đặt mục tiêu như thế nào, chia nhỏ mục tiêu có lợi ích ra sao? Theo dõi việc thực hiện mục tiêu như thế nào? Thôi thúc cũng như chia sẻ một số kinh nghiệm đặt mục tiêu của các lập trình viên.

Bạn nên theo dõi việc thực hiện mục tiêu mỗi tuần và điều chỉnh trước khi lên kế hoạch cho một tuần mới.

Every step you take without a clear direction is a wasted step. Don't be a ship floating aimlessly in the ocean. Chart a course before you set sail.

  • Your big goal should be something not too specific, but clear enough. (Quy tắc thiết lập mục tiêu SMART)
  • Do you want to become a manager or executive at a company? Do you want to go out and start you own software development business some day? Do you want to become an entrepreneur creating your product and bringing it to market? Or just becoming a senior-level developer.

Nếu xác định là trở thành senior-developer thì phải thiết lập các small goal như đọc bao nhiêu quyển sách mỗi năm / mỗi tháng / mỗi ngày bao nhiêu trang.

Put down this book and define some goals for yourself.

Track and adjust your goals if necessary

Soft skills: You need them more than you think

Leave me alone, I just want to write code! - If you want to be a good software developer, you have to learn to deal effectively with people (even if writing code is the part of your job you enjoy the most).

Everyone wants to feel important

Đọc đoạn này, nhớ đến cách cư xử của mình đôi khi cũng rất tệ. (It's very easy to make the mistake of quickly dismissing a coworker's idea so that you can present your own, but when you commit this grievous error in judgment, you'll often find them deaf to your ideas because you've made them feel unimportant.

Never criticize

Criticism will rarely be a tool that will achieve your intended result. Studies have shown that rewarding a positive behavior is much more effective than punishing a negative behavior.

Think about what the other person wants

Stop thinking regarding you and what you want and start thinking regarding what is important to the other person and what she wants. (Try to shift your focus from you to them).

Avoiding arguments

Avoiding arguments at all costs is imperative. If you have a disagreement about how something should be done, in many cases your best course of action is to first determine whether or not that particular point is a hill that's worth dying on - especially if you know it is for the other people involved. Any opportunity that you can find to give up your side and admit that you're wrong on a small matter that doesn't mean much to you, but perhaps a great deal to the other person, will win you unmeasurable respect with them and store up for your future credit that can be redeemed when tables are turned.

Dealing with poisonous people

If you recognize someone as being caustic, don't try to change them, and don't try to deal with them, just stay out of their way and limit your interactions as much as

Tránh tương tác với những người tiêu cực, càng xa càng tốt. (Những người luôn có cái nhìn tiêu cực về mọi thứ trong cuộc sống, luôn tự xem mình là nạn nhân của mọi sự việc xảy đến.)

Hacking with Interview

Resume writing is a skill you can delegate to someone else but interviewing is something only you can do, so it’s a critical skill to master.

Think outside of the box, Những cách tốt hơn để "pass" một cuộc phỏng vấn:

Hiring an employee is an investment. It costs money and time to hire an employee, and you want to see a good return on that investment. An employee who is autonomous (tự trị) and can do what needs to be done without asking them to do it are employees who always add to the bottom line. (Know how to figure out what needs to be done and how to do it without requires constant hand-holding to be productive.)

What can you do right now

The first thing you should do is make sure you're keeping up with your technical skills. All the interview tricks in the world won't help you get a job you aren't qualified for. Make sure you're reading technical books and blog articles and putting time into developing your skills.

Employment options

Trong Sách đưa ra 3 hướng phát triển sự nghiệp dành cho Lập trình viên:

Mỗi con đường sự nghiệp đều có ưu và khuyết điểm riêng, nhưng đều có quả ngọt dành cho những người kiên trì theo đuổi. Bạn chọn sự ổn định / hay sự tự do, thu nhập không giới hạn đi kèm với rủi ro cao...), quyết định là ở bạn.

Employee

Freelancer

Entrepreneur

What kind of software developer are you?

Specialization is important

"I’m a C# developer," or "I’m a Java developer."

This kind of specialization is too broad. A programming language doesn't tell me anything about what kind of developer you are and what you can actually do. It only tells me one tool that you use to do your job.

Ngoài ra, bạn đừng ngại việc chuyên biệt hóa sẽ làm giảm cơ hội của bạn, bởi vì chuyên gia về một lĩnh vực cụ thể sẽ tốt hơn là một người trung bình của mọi thứ (Full-stack developer tuy rất được Startup ưa chuộng, nhưng là một Full-stack developer cũng nên có một mảng sở trường).

As long as your speciality is big enough and it's not overcrowded, you'll have a much easier time finding a job or getting a client than you would if you just called yourself a software developer.

The rule of specialization is that the deeper you specialize, the fewer potential opportunities you'll have, but the more likely you'll be to get those opportunities.

Kinds of specialties for software developers

There are many different kinds of specialties for software developers. Obviously there are language specialties and platform specialties, but there are also specialties in methodologies and specific technologies or industries.

Frontend (creating and programming user interfaces), Middleware (implementing business rules and logic), Backend (working with database or low-level operations). You can even pick all three and be a full-stack web developer, but in that case you should definitely specialize in a specific stack of technologies. (For example: ASP.NET MVC/C#/Sql Server or Rails/Ruby/Postgresql/NoSQL...)

Embedded Systems Development/Mobile Development (iOS, Android)/Internet of Things...

Big Data/Deep Learning...

Picking your specialty

Here are a few tips to help you pick your specialty:

Don't worry, you can always change your specialty later if you need to. For example, a good friend of mine, John Papa, used to specialize in Microsoft Silverlight. After Silverlight went away, he changed his specialty to Single Page Applications (SPAs).

What about the Polyglot programmer?

Although I recommend specializing and having a specialty, it doesn't mean I think you shouldn't also have a wide variety of skills. Learn as much as you can and become as flexible as possible, but also have a specialty that makes you unique and stand out. If you have to choose between the two options, start with specialization and branch out later.

Climbing the corporate ladder

Đừng chấp nhận sự ổn định cỏn con, để được tăng lương và tiến lên các bậc thang cao hơn của sự nghiệp, đừng ngại làm những việc sau:

Take Responsibility (Nhận thêm trách nhiệm)

The most important thing you can do to go up in the ranks at any company is to take on more responsibility. Any time you're offered more responsibility, take it.

Nhưng sẽ như thế nào nếu không ai giao phó thêm trách nhiệm/công việc mới cho bạn, trong những tình huống này, bạn phải là người chủ động tìm kiếm các cơ hội: khởi xướng và đưa ra một dự án mới mang lại nhiều giá trị cho công ty. Tại một công ty nào cũng vậy, vẫn luôn có những khu vực ngổn ngang mà bạn có thể cống hiến tài năng của bạn, đặc biệt là tại khu vực mà không người nào muốn dính dáng vào. Perhaps there’s a legacy application that no one wants to touch or a certain module in your codebase that is particularly nasty. Và đó chính là nơi bạn thể hiện giá trị của mình.

Một cách khác nữa đó là trở thành mentor cho những đồng nghiệp khác trong Team của bạn. Volunteer to help the new person get up to speed. Always offer help to anyone who needs it. Not only will you learn more by encountering and solving other people’s problems, in addition to your own. Ngoài ra, những nỗ lực này giúp bạn xây dựng reputation và bạn có nhiều cơ hội được cất nhắc lên các vị trí team-lead/quản lý cao hơn...

How You can take on more responsibility

  • Is there a project that has been neglected that you could take charge of?
  • Can you be the person who helps new team members get up to speed?
  • Can you take the role of documenting process and keeping those documents up to date?
  • What job does no one else want to do that you could take on and make easier or automate?

    Becoming Visible

Thật vô nghĩa nếu bạn là một người làm việc tốt nhất, chăm chỉ nhất trong Team nhưng không ai biết bạn là ai và những gì bạn đã làm được. Những nỗ lực của bạn sẽ bị lãng phí nếu như bạn không để sếp (boss) hoặc cấp quản lý trực tiếp của bạn biết bạn đã và đang làm gì.

Cách giải quyết: Có một daily logging, ghi lại những việc bạn đã đầu tư thời gian vào đó và những gì bạn đã hoàn thành trong ngày. Rồi tổng hợp lại thành Weekly summary và gửi đến cấp quản lý của bạn.

This weekly report ensured that every single week I’d show up on my manager’s radar and I could talk about what I accomplished that week without outright bragging. It was a great way to gain visibility and it often appeared that I was much more productive than my peers simply because my manager was hearing about all the work I was doing, but not much about the work other developers were doing.

Không chỉ vậy, Weekly summary này còn là cơ sở để bạn tự đánh giá chính mình khi thời điểm review performance đang đến gần. (I could go back through my weekly reports and pick out my key accomplishments for the year. When it came time to fill out reviews, I knew exactly what I had accomplished during the year and I had dates to prove it.)

How to be more visible

  • Keep a daily log of your activities - Send this log as a weekly report to your manager.
  • Offer to give presentations or trainings - Pick a topic that would be useful to your team.
  • Speak up - Do this at meetings and any time you get the chance.
  • Be seen - Set up regular meetings with your boss. Make sure you are seen often.

    Educate yourself

Another really good way to advance is to keep increasing your skills and knowledge. Có nhiều cách học để thăng tiến trong sự nghiệp, không nhất thiết phải theo đuổi con đường học vấn ở trình độ cao hơn như Thạc sĩ, Tiến sĩ nhưng hãy luôn trau dồi thêm kỹ năng và kiến thức của bạn. Quan trọng là học cách học và thái độ sống tích cực. Làm được vậy, bạn sẽ dễ dàng thăng tiến hơn trong sự nghiệp vì bạn đã cho người khác thấy được rằng, bạn giá trị hơn so với bạn của trước kia. Also, don't just learn about software development. Take some time to learn about leadership, management, and business if you have your sights set on higher-level and possibly executive positions.

And don't forget to share what you're learning (Give Presentation, Create your own blog, write magazine articles or books, speak at community events or conferences...) - The outside exposure will help establish you as an authority in your area of expertise and will make you seem more valuable to the company you’re working for.

Be the problem solver

In any organization there are always plenty of people who will tell you why some idea won’t work or some problem is too hard. People like that are a dime a dozen. Don’t be one of them. Instead, be the person who always has a solution to a problem and is able to execute that solution to get results. If you can solve problems that other people can’t or aren’t willing to tackle, you’ll easily become the most valuable person at any company.

Nếu cảm thấy, nơi này không có đất dụng võ, dù bạn đã thử mọi cách, QUIT. Tìm một nơi khác để bạn có thể phát huy và đẩy giới hạn của bản thân lên cao hơn nữa.

What about politics?

Tập trung vào một nền tảng vững chắc hơn là giá trị của bản thân mình hay thương hiệu cá nhân của mình. Thăng tiến do đi đường vòng bằng "chính trị" không bao giờ bền vững cả.

You can’t completely avoid politics, so you have to at least know what’s going on, what kinds of people you need to avoid, and which ones you should never cross.

viphat commented 8 years ago

SECTION 3 - Learning

Chương 27 - Learning how to learn

Đọc hết thì thấy rằng có 2 ý chính thôi:

One of the most important skills a software developer can learn is the skill of self-teaching. Self-education is a vital skill in a world where new technologies are introduced every single day.

If i show you how to do something, you might forget it, but if you do something yourself, you're much more likely to remember it, and if you actually teach what you're trying to learn to someone else, not only do you remember it, but you get a much deeper understanding of it.

Chương 28 - My 10-step process

Chương trình trình bày hệ thống 10 bước để acquire nhanh một ngôn ngữ/công nghệ mới, chúng ta không phải và cũng không nên đọc từ đầu đến cuối một quyển sách bởi vì khi đã ra ngoài làm việc, chúng ta không còn đủ thời gian để làm việc ấy nữa.

Có 3 thứ mình cần phải biết để có thể học một công nghệ mới:

  1. How to get started - Những kiến thức nào là căn bản nhất chúng ta cần phải biết để làm quen với bất cứ thứ vì chúng ta đang học?
  2. The breadth of the subject - How big was the thing I was learning and what could I do with with it? I didn't need to know every detail to start, but if I had a decent overview of what I could do and what was possible, I could always find more details later.
  3. The basics - Beyond just getting started, what were the basic use cases and the most common things I'd need to know to use a particular technology? What was the 20% I could learn that would cover 80% of my daily usage?

Tham khảo thêm quyển Học mọi thứ trong 20 giờ đầu tiên.

Để học nhanh một công nghệ, chúng ta cần có một kiến thức nền vững vàng, tìm hiểu tổng quan về công nghệ mà mình đang tiếp cận để có tư duy và cách tiếp cận hiệu quả, tìm ra 20% cốt lõi của công nghệ đang tìm hiểu để có thể đáp ứng 80% công việc hàng ngày của bạn.

I used this technique to learn the Go programming language in a very short time period - just a few weeks. I focused on learning how to write code with Go as soon as possible. Then I got an overall idea of how big the programming language was and what kinds of libraries were available. I wanted to get an overall feel for what the language could do. Finally, I went through and learned the basics. I only expanded on those basics when I needed to dive deeper.

The 10-step system

Step 1 - Get the Big Picture Step 2 - Determine scope Step 3 - Define success Step 4 - Find resources Step 5 - Create a learning plan Step 6 - Filter resources Step 7 - Learn enough to get started Step 8 - Play around Step 9 - Learn enough to do something useful Step 10 - Teach

Bước 1-6 là những bước thuần về nghiên cứu và tìm hiểu, Bước 7-10 là bước học và hành nên bước 7-10 cần lặp đi lặp lại cho từng module bạn đã tạo ra trong bước 5 (Tạo một kế hoạch học tập).

Chương 29 - Steps 1-6: Do these once

Đây là các bước quan trọng nhất vì nó sẽ quyết định sự thành công hay thất bại của việc học. Trong những bước này, bạn sẽ làm các công việc là tìm hiểu, tìm kiếm, chuẩn bị và lên kế hoạch hành động.

Step 1: Get the big picture

(Đang soạn tiếp)