Hi, I'm Lukas Atkinson. I currently study Computer Science in Frankfurt, Germany. My interests include software development and design, testing and quality management (especially in an agile context), programming language concepts and parsing technology, and web backend development.

Languages

Perl

My primary language is Perl. I have a very comprehensive understanding of the language, and know both its elegance and its numerous flaws. I enjoy that this language is very pragmatic and doesn't have an ideological axe to grind.

I used Perl to explore and understand various topics and techniques.

Its flexible DIY approach to object-oriented programming helped me to form a deep understanding of OOP. For “real” code, I make heavy use of objects systems like Moose or Moo – I really miss these modules in any other language I touch.

The book Higher Order Perl by Mark Jason Dominus (mjd) was my introduction to functional programming. Admittedly, the Perl code is somewhat archaic. But it's a very good book that starts at basic FP concepts and progresses to rather advanced use cases, which I'll have to re-read sometime to finally get the full benefit. MJD was nice enough to publish a free PDF of his book, but since then I've bought a physical copy.

One of Perl's strengths is text processing. Its regex integration started my interest in parsing, but at that time I didn't know enough CS theory to make full use of them. Later, I found out about Marpa, an Earley-based parsing algorithm and Perl module by Jeffrey Kegler. You can read my articles tagged Marpa, especially my comparison of Marpa with other parser families.

At some point, I stopped hacking and transitioned to an engineering mindset. The Modern Perl book by chromatic was a pivotal experience, and started my interest in code quality and testing. For Perl code, Test::More is my framework of choice, though I prefer an RSpec-style test structure as offered by Fennec.

I bundled up a few utility functions I frequently need and released them as Util::Underscore on CPAN.

Read my articles tagged Perl or learn more about Perl.

Advanced and intermediate proficiency

I know some other languages at an intermediate level. I am immediately productive in these languages without noticeable ramp-up time, but may have little experience with more advanced features, large-scale projects, or libraries and the larger ecosystem.

  • I enjoy the unprecedented amount of control and precision C++11 offers and requires. I'm comfortable with the design and implementation of C++ programs, and have some experience with more advanced topics such as template metaprogramming. The language is incredibly broad and baroque, but I still like it.

    I gathered a lot of experience during a one-year stint doing testing, refactoring, build engineering, and other maintenance on a C++-based enterprise middleware product to connect various data sources in the financial industry.

    Read my articles tagged C++ or learn more about C++.

  • Python is my go-to language for smaller calculations or when prototyping an algorithm. I use SciPy/NumPy/Matplotlib for some small-scale scientific programming and data analysis.

    I currently contribute my code quality experience to a research project on evolutionary algorithms for network optimization, where I perform testing and refactoring, write documentation, and do profile-guided performance tuning.

    Read my articles tagged Python.

  • Java was the first language I set out to learn, and served as my introduction to object-oriented programming. I'm comfortable with Java8 features, and am well-versed in design patterns.

  • JavaScript was the first language I became productive with. I have a reasonably good overview over the core language and some libraries such as jQuery, but I don't come across many occasions where I'd have to use JavaScript.

    Read my articles tagged JavaScript.

  • Im fairly knowledgeable about web technologies such as HTML5 and CSS3.

  • Scala is extremely powerful and flexible. It would easily be my favourite language if it weren't for those excruciatingly long compile times.

    Learn more about Scala.

Basic proficiency

Beyond that, I have dabbled in a multitude of languages. I don't have a lot of deep experience, but I know the basics and can get up to speed quickly when needed.

  • I'm particularly fond of languages that support functional programming, such as Standard ML, OCaml, or Haskell.

    Of these three, I have the most experience with Haskell. I have some understanding of the type system, monads, and techniques such as point-free style and lenses. I still have to work on understanding I/O, and the various algebraic structures related to monads: applicatives, traversables, ….

  • Golang (Google Go) is an exciting language but sadly lacks generic types. While I know the core language well, other languages make it easier to write DRY code.

  • I once had to write a bit of assembly code for a microcontroller. That was really interesting and put other languages in perspective. While I'd rather not repeat the experience, I won't freak out if I have to read a disassembled program.

  • Somehow, C is still around. It's a nice language if we forget about string handling with the standard library. Or creating any kind of abstraction. I prefer C++, thank you.

    That said, knowing C is useful when dealing with POSIX systems.

  • Perl6 and Rust are a fascinating glimpse into the future of language design. I like them, but have yet to invest time into learning the language itself rather than learning about the language.

Social Media and Contact

I use various social media:

If you have questions, comments, or suggestions regarding this website or my projects, you can also reach me per email. However, I will not provide programming help, and won't respond to messages with unsolicited offers (spam, job offers, link trading, …). MnRK2Y9hX4 [@] lukasatkinson [・] de. I'll try to respond to legitimate messages within a couple of business days.