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:

  1. 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)

  2. 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!)

ca07617b5f7fb172e8af9a28ecfc9ec This is the gorgeous sunset we see from our office.