Some relevant background information about me:
I studied statistics and math during undergraduate and a little bit finance (every one in UIBE study finance somehow). Back then I aimed to land a career in the quantitative finance field. However, the beautiful spring when I studied in UC, Berkeley as a visited student was the start time of my journey towards a software developer.
I did have a plenty of coding experience in python and R before, but CS61B was the first legit computer science course I’ve ever had and it was soooo fun (thank u, Prof. Hug)! I mean, designing those data structures, optimizing the runtime, and learning smart and tricky algorithms makes if the most interesting class in the world (challenging tho). I do enjoy the time our teammates and I spent days and nights in the Mottiff library working on our final project – Escape the Dungeon youtube demo . It involved lots of brainwork, communication, and huge self-fulfillment for sure! Gosh, I missed the good old day.
Some digression: I always have a hard time understanding recursion. I have a trick now:
-
Think of if we are given the solution of a simpler scale func(n-1), how can we solve the size n problem using the outcome func(n-1)
-
What the base case is?
Eg. Reverse a linked list and return the new head (which is the old tail)
def func(head: Node) -> Node
2. The base case:
if head == None or head.next == None:
return head
1. If we are given func(head.next) as the reversed sub-linkedlist, we can solve the whole problem by doing
rest = func(head.next)
head.next.next = head
head.next = None
return rest
How I prepared for the technical interview:
Sorry about my chatty personality. Here is the meat and potato. The summer after that semester, I started finding internship as a software developer. I reviewed data structure and java language again and again. I self-learnt system design (hard and need to recite and understand) and SQL(easy). Most importantly, a bunch of Leetcode problems (I think easy and medium is enough). I failed one interview because they asked me questions about NLP and I knew nothing about it at that time. I passed another interview (1 coding + 1 technical (data structures and some machine architecture) + projects experience + 1 HR behavioral) and got the job in a startup based in Shenzhen, China. check our apps at apple store!
How it feels like to work as a SWE (web app backend) in a tech start-up?
Short answer: best summer I’ve ever had! (so much fun!)
Here comes to the real-world coding! It was very different from the coursework from cs61B. The first 2 weeks:
- I need to spend 1/4 of my time getting familiar with product design (that is the guide of how you design your algorithm).
- 1/4 of time dealing with all kinds of software – Postman (for testing endpoints), Jenkins (for deploying), Dokers (for running some resources), and Git (of course).
- 1/4 communicating with other developers,
- and only 1/4 I was truly siting in front of the screen quietly writing codes (and the codes built under Spring boot framework so I need to learnt how to use the framework).
But once I know how to use those software and learnt the product design detail in heart, my efficiency grew exponentially.
Most most valuable take-off:
- Getting into the process of designing a product from scratch, building it, putting into to production, and getting feedback from the app users. It is literally like involving into a baby growing into an adult!
- Nice coding style and how to code in a big project (my trick: draw a logical plot instructing myself what kinds of files need to be created in what kinds of folders, and set it to be your PC wallpaper).
- My adorable colleagues. They are my tutors, my career and life mentors. I still ask them questions when I am doing some course projects now.
Something I don’t like:
There is one thing I don’t like at the very beginning of my internship is to remember those product design. Back then, I was thinking, “Well, this is not an interesting product, and there are so many details need to remember. Why I waste such a long time learning the functions of the product rather than designing algorithm?” I was so wrong back then. Knowing products and discussing clients’ needs with product managers in advance is the key of writing robust and reusable code. I know it takes time. But a good engineer must be a curious and quick learner, isn’t it?
(Plus, you can choose to work for a team that building up the products that interest you. One day you can be a product manager yourself! Don’t limit yourself to that tiny little screen size of codes!)
This is the gorgeous sunset we see from our office.