More

This post has been recently updated to include newer experiences (October 25, 2023).

Software Development

With respect to software development I can say I am incredibly flexible. In my recent contract work I was tasked with investigating a code base written in Scala, a language I had never used before, and writing a shim between some older soon to be terminated external APIs and the current replacements. I was able to familiarize myself with the code base, build and deploy a working solution in about two months, with about an extra month to handle some edge cases in production and to alleviate some rough points with the prior existing software.

After that I was tasked with rewriting the application to alleviate existing technical debt and to help with maintainability. Given the choice of any programming language I chose JavaScript to utilize NodeJS in order to give the broadest chance of a future developer being familiar with the language and to take advantage of the inherent asynchronous nature of the language. The latter point being important as this application is constantly making network calls from either remote or managed servers and the performance increase was notable.

The creation of the rewritten application and its deployment took an approximate three more months. Which I highlight only to state that I feel confident in my ability to learn any programming language and realistically any framework necessary and apply them. Even in areas outside my traditional domain knowledge (as both of these tasks were).

Programming Languages

The above being said languages and frameworks I am comfortable in.

Python is basically my native language and what I reach for, for prototyping. Related frameworks/libraries I am comfortable in:

  • Numpy and anything built off of it, I’m incredibly comfortable even using esoteric features of the library.
  • Tensorflow both v1 and v2 including building custom classes and understanding what it is doing “underneath” the hood at an abstract level.
  • Pandas though to a lesser extent than the others, I have however used it extensively enough.
  • Any framework/library dealing with molecular dynamic simulations, I have used way too many…

Having now used Javascript extensively in my most recent work, I feel incredibly comfortable using the language, and could probably learn any framework I needed. Though I have the most experience coding with NodeJS as my engine.

Scala, also related to recent work, I have become familiar in. I would not say it is my favorite but I feel comfortable enough to work in it again. Hopefully a more modern version with newer libraries.

Go, I have written short programs in and read source code.

C++, I have also written short programs and read source code, including CUDA, hope to play with HIP soon.

R, small amount of scripting, but found it a joy to use. I believe I could do what is expected of a normal R biology programmer with minimal prep time.

Bash, I can script and read bash scripts, please don’t ask me to write a full fledged program in bash.

General Computer Knowledge

With respect to my pure computer knowledge, I have been using Linux nearly full time since 2012 (for a few months I switched back to Windows 10 when it released to test it out). That being said having been raised on Windows computers and my high school exclusively used OSX I am comfortable in other environments as well. I have even used front9 and OpenBSD for fun. This all to say that if it is software on a computer I am probably capable of using it, even if I don’t enjoy it, looking at you LabView. I also like testing out new software if necessary for a team and have historically done so as the software and hardware expert in my PhD. lab (most notably VR).

Which brings up the next bit of knowledge, hardware knowledge. While I am definitely not on the level of computer engineer or LLVM developer, I am quite knowledgeable of computer hardware and its limitations. This placed me as a pseudo systems administrator in my PhD. lab, in particular with hardware acquisition and maintenance as well as being a point of contact for external system administrators and being able to independently test and solve problems as they arise at both the software and hardware level. Combined with this knowledge is the ability to explain complex computational knowledge to lay people, specifically educating my lab and our collaborators on strengths and drawbacks of GPGPU computing. All of this ability was utilized in the securing of a grant for the University of Vermont to acquire the Deep Green supercomputer at the Vermont Accelerated Computing Core. I was also a part of the team that tested Deep Green as part of its initial set up.

Computational Biophysics Knowledge

I have played with a broad range of computational biology software. I started with Schrodinger Suite and feel quite comfortable diving deep into the documentation, using their file types, scripting it etc. If it is related to them and I have not used it, I can be functional using it in probably a day (domain specific knowledge not withstanding). That also includes everyone’s favorite pymol for image generation of proteins. I have also extensively used Amber/AmberTools and in some ways feel more comfortable with it, stemming from my need to do a deep dive into code and documentation for one of my projects. I specifically know how to manipulate the force field files and know how they work on an intimate level. In a related but definitely less than typical realm, I have also worked in depth with the Nanome software. Historically I was tasked with demoing it to students and other external members of the lab. I add this last one just to state, it really does not matter what software is put before me.

Software I have created includes a program to calculate the energy and forces on individual atoms from an existing simulation. Specifically, it enables the ability to disable interactions between individual atoms after the fact to determine the contribution from different type of interactions. At the time of creation there was no way to do this in a manner that didn’t require the re-running of simulation software with unique atom types. I go into greater depth on this program and it’s workings in a blog post. The other notable work from my time in the lab would be a volume calculator which is able to give the concave hull of any 3D structure so long as some external points are known. While initially developed for DNA nanocages, it can be easily extended to other 3D systems as will be followed up in a further blog post.

Scientific Computing

General extension of my programming includes broad knowledge on basically every post MD analysis tool written in Python (I think I have coded in all of them at some time or another, feel free to challenge me). I am comfortable in both bash and python scripting to tie programs together, and have extensive knowledge of Slurm. I understand multi-process vs multi-thread vs asynchronous paradigms, problems with race conditions and the specifics of GPGPU programming. I have used all of these in my work at one time or another through direct exposure in coding.

I have also been exposed to neural networks from simple networks to complex GANs. Even developing my own large based data sets from simple PDB IDs to force, positional, and energy data. This data was then used to train a force prediction network, which was further refined using a super computer to run multiple replicates in a hyper-parameter search. Projects I have been apart of include graph neural networks for drug discovery among other uses. In these external project, I have often been the go between translating among potential stakeholders the uses of scientific computing or working with the computationalist to further refine the project to match some biochemical goal.

Mathematics Knowledge

I highlight this only for the simple reason that someone with my background generally doesn’t seek out theoretical math. However I have taken two graduate levels of combinatorics which specifically focused on graph theory. Maybe more in line I also obviously have a strong understanding of integration, division, etc that is required or benefits a physic major. In other words, I like math, I find it fun. I’ve gone to math talks and like working on weird math problems.

Languages

ちょうとだけ日本語が知ています。もちろんペラペラじゃないですけどかんたな日本語は丈夫です。でも、JLPTのレベルはまだJLPTができません。