About Me

Hi, I'm Lukas Atkinson. I currently study Computer Science in Frankfurt, Germany. My interests include:

  • software development topics such as testing, quality management, agile methods, and web (backend) development;

  • programming language concepts and parsing technology;

  • legal topics such as privacy and data protection, or open source culture and licensing.

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. Perl has many awesome testing frameworks such as Test::More, Fennec, and a passable Test::BDD::Cucumber implementation.

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.

Python

For someone who likes Perl, it turns out I'm doing a lot of stuff in Python. I'm not necessarily the biggest fan of all its design choices, but I really like features like docstrings, async functions, generators, and type annotations. More languages should steal those!

I came to Python via scientific programming and data analysis: munging data and plotting it with SciPy/NumPy/Matplotlib. Recently I've also been doing a bit of machine-learning work with Scikit-Learn.

I'm currently contributing my Python & code quality experience to a research project on evolutionary algorithms for network optimization. In addition to developing and tuning optimization strategies, I perform testing and refactoring, write docs, and do profile-guided performance tuning.

I'm also the current maintainer of gcovr, a code coverage report generator for C/C++ that's written in Python.

Read my articles tagged Python.

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++14 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++.

  • 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.

    Read my articles tagged JavaScript.

  • I'm fairly knowledgeable about web technologies such as HTML5 and CSS3. I'm also familiar with ES5-era JavaScript, but I don't come across many occasions where I'd have to use it.

  • My personal projects tend to use Rust nowadays. It's a very promising language, but not quite there yet. There are a lot of rough edges, and many important features that are still nightly-only (experimental). In 5 years or so Rust will be great. Hopefully :)

    With a C++ and Haskell background the type system feels very familiar, and the C++-level control I can get safely is truly amazing. I love the borrow checker. The flip side is that I've never before argued as much with the compiler.

    But the best things about the language are not the language features, but its community, governance, and ecosystem:

    • a very open and inclusive development process,
    • rapid delivery of compiler updates with real-world improvements, and
    • the foundations of a great library ecosystem (crates).

    Especially crates are a killer feature compared to C++.

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, ….

  • 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.

  • 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. Which actually happened recently when I did some low-level C++ debugging!

  • 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 is a fascinating and confusing glimpse into the future of language design. I like it, 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.