{"id":2398,"date":"2015-02-10T13:15:06","date_gmt":"2015-02-10T11:15:06","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=2398"},"modified":"2015-02-05T12:35:50","modified_gmt":"2015-02-05T10:35:50","slug":"the-genius-of-pythons-self","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/","title":{"rendered":"The Genius of Python\u2019s Self"},"content":{"rendered":"<p>When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than class-level, like Java <code>static<\/code> methods), the first parameter needed to be <code>self<\/code>. Technically, you could name it whatever you wanted, but the first parameter was supposed to be assumed to be an object of the same type as what you were working on, and it is convention to call it <code>self<\/code>.<\/p>\n<p>I was confused. Up until then, I\u2019d marveled at how python kept everything more concise than pretty much every other language that I\u2019d worked with. Now they were putting in something that required extra typing. It took a while to understand why it was even necessary, especially since it was a little while yet before they even showed class-level methods. Then I realized that they would need <i>something<\/i> to distinguish between the two, and pretty much anything you did to accomplish that goal would require extra typing. So I let it go.<\/p>\n<p>Then I found out that, because of that convention, you could call the method two different ways: <code>Class.method(object...)<\/code> or <code>object.method(...)<\/code>. My first thoughts were that this was a fairly nice little feature, but didn\u2019t think too much on it. Then, when I was working with Java, I realized that they sometimes doubled up some functionality with static methods as they did with object methods. Heck, even I did that sometimes, when I felt it would be helpful. With python, <i>all<\/i> methods automatically worked that way. Handy!<\/p>\n<p>Then, I made another small breakthrough. I was reading a book that helped you get a basic understanding all the from the electronic nand gate up through making a CPU, then an assembly language, then higher level languages with a VM, and finally to using that higher level language for making Tetris. While learning how to build the compiler for the higher level language, it talked about how they essentially added the <code>self<\/code> (or <code>this<\/code>) in the background when it was compiled. I realized that there really wasn\u2019t a good reason <i>not<\/i> to have <code>self<\/code> there.<\/p>\n<h2><b>How Self Helps with Functional Programming<\/b><\/h2>\n<p>Those previous moments of epiphany were nice, but don\u2019t compare to my latest one. I started reading the beta of a new book called <a href=\"http:\/\/shop.oreilly.com\/product\/0636920032519.do\">Fluent Python<\/a> which tried to really hammer home how beautiful of a language python is, even if its users weren\u2019t using it so beautifully. Along with that, I\u2019ve been <i>really<\/i> hammering in on getting into a functional programming mindset, reading <a href=\"http:\/\/shop.oreilly.com\/product\/0636920030713.do\">Java 8 Lambdas<\/a> and <a href=\"http:\/\/shop.oreilly.com\/product\/0636920030331.do\">Becoming Functional, an<\/a>d hopefully I\u2019ll be able to get and read <a href=\"http:\/\/shop.oreilly.com\/product\/0636920029687.do\">Functional Thinking<\/a> somewhere down the road. Yeah, I\u2019ve had a sudden surge in O\u2019Reilly books added to my library lately.<\/p>\n<p>Most of my time studying functional programming had revolved around using it in Java, since that\u2019s the primary language I use, though that\u2019s more by circumstance than choice at this point. Anyway, Fluent Python got my mind back onto python and I made an even more startling discovery about why having <code>self<\/code> there is such a good idea. I mean, it\u2019s such a good idea that I wonder if Guido is a super genius (some believe he is) or if this is just a side effect of an only-smart decision he made.<\/p>\n<p>Before I tell why it\u2019s so helpful in functional programming, let me give a mini primer on why OO and functional programming have generally had a bit of a disconnect when it comes to working together. They never really were meant to. In functional programming, functions work on whatever objects are passed in. In OO, objects work on themselves using functions and whatever is passed in.<\/p>\n<p>The real disconnect comes into play when trying to pass named functions (not lambdas) into another function. The parameter expects a function that takes in a certain object type and returns a certain type. As an example, we\u2019ll say that the expected function takes in a list and returns an integer. When calling this function, you decide you want to pass in the list\u2019s method that returns the size of the list. But that doesn\u2019t take in a list. It uses a list, but it doesn\u2019t accept it as a parameter.<\/p>\n<p>Java 8 gets around this in its method references by having the compiler attempt to automatically map where the list is (in this case, it\u2019s the object that the method is being called on) and turning it into a lambda object that actually fits the expected function\u2019s \u2018signature\u2019. There\u2019s a ton going on in the background in order to let methods act as functions.<\/p>\n<p>Python does not suffer from this. Why? Because of <code>self<\/code>. It doesn\u2019t need any special mapping happening in the background because its method <i>is<\/i> a function. This is probably the greatest (and amazingly simple) innovation to help bridge the gap between functional and object-oriented programming.<\/p>\n<h2><b>History<\/b><\/h2>\n<p>I think that the biggest reason that python was able to see how to integrate OO and functional programming the way that it has been is due to the fact that python was not originally an object-oriented language. If I remember my history correctly, Guido hadn\u2019t used an OO language before he developed python, but he <i>had<\/i> put in functional programming early on (if not right away). His colleagues persuaded him to put in object orientation eventually, and he implemented it in a way that worked well with what he had already done (Then did it again, since he added a second preferred \u201cstyle\u201d of creating classes later on).<\/p>\n<p>This is the opposite of how it usually happens. True, many (if not most) functional languages added a way of simulating objects at some point, but from what I\u2019ve seen, they don\u2019t fully implement all of the requirements of OOP. Also, a lot of other languages that have functional programming, added it as an afterthought further down the road. They couldn\u2019t design their class definitions to suit the functional style without messing with all their users. They didn\u2019t have that luxury, even if they had the idea.<\/p>\n<p>There may be other languages that meld OO and functional programing together well, but I haven\u2019t heard of them.<\/p>\n<h2><b>Outro<\/b><\/h2>\n<p>I hope I gave you a reason to appreciate the subtle artistry of the python language. It seems a little weird when coming to it from a \u201cpure\u201d OO language such as Java, but those little strange bits help it to be one of the most fluent and useful languages out there.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/programmingideaswithjake.wordpress.com\/2014\/12\/20\/the-genius-of-pythons-self\/\">The Genius of Python\u2019s Self<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/wcg\/\">WCG partner<\/a> Jacob Zimmerman at the <a href=\"http:\/\/programmingideaswithjake.wordpress.com\/\">Programming Ideas With Jake<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than class-level, like Java static methods), the first parameter needed to be self. Technically, you could name it whatever you wanted, but the first parameter was supposed to be &hellip;<\/p>\n","protected":false},"author":51,"featured_media":1651,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[],"class_list":["post-2398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Genius of Python\u2019s Self - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Genius of Python\u2019s Self - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2015-02-10T11:15:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jacob Zimmerman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/jacobz_20\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jacob Zimmerman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/\"},\"author\":{\"name\":\"Jacob Zimmerman\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39\"},\"headline\":\"The Genius of Python\u2019s Self\",\"datePublished\":\"2015-02-10T11:15:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/\"},\"wordCount\":1126,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"articleSection\":[\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/\",\"name\":\"The Genius of Python\u2019s Self - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"datePublished\":\"2015-02-10T11:15:06+00:00\",\"description\":\"When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"The Genius of Python\u2019s Self\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39\",\"name\":\"Jacob Zimmerman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g\",\"caption\":\"Jacob Zimmerman\"},\"description\":\"Jacob is a certified Java programmer (level 1) and Python enthusiast. He loves to solve large problems with programming and considers himself pretty good at design.\",\"sameAs\":[\"https:\/\/programmingideaswithjake.wordpress.com\/\",\"https:\/\/x.com\/https:\/\/twitter.com\/jacobz_20\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/jacob-zimmerman\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Genius of Python\u2019s Self - Web Code Geeks - 2026","description":"When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/","og_locale":"en_US","og_type":"article","og_title":"The Genius of Python\u2019s Self - Web Code Geeks - 2026","og_description":"When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than","og_url":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2015-02-10T11:15:06+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","type":"image\/jpeg"}],"author":"Jacob Zimmerman","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/jacobz_20","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Jacob Zimmerman","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/"},"author":{"name":"Jacob Zimmerman","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39"},"headline":"The Genius of Python\u2019s Self","datePublished":"2015-02-10T11:15:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/"},"wordCount":1126,"commentCount":1,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","articleSection":["Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/","url":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/","name":"The Genius of Python\u2019s Self - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","datePublished":"2015-02-10T11:15:06+00:00","description":"When I first started learning python and read about how they do class methods, I was a bit thrown off. To be an object-level method (rather than","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/python\/the-genius-of-pythons-self\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/www.webcodegeeks.com\/category\/python\/"},{"@type":"ListItem","position":3,"name":"The Genius of Python\u2019s Self"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39","name":"Jacob Zimmerman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g","caption":"Jacob Zimmerman"},"description":"Jacob is a certified Java programmer (level 1) and Python enthusiast. He loves to solve large problems with programming and considers himself pretty good at design.","sameAs":["https:\/\/programmingideaswithjake.wordpress.com\/","https:\/\/x.com\/https:\/\/twitter.com\/jacobz_20"],"url":"https:\/\/www.webcodegeeks.com\/author\/jacob-zimmerman\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/2398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=2398"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/2398\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/1651"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=2398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=2398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=2398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}